LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: Andy84920

一个操作符重载问题!

[复制链接]
 楼主| 发表于 2003-8-15 02:03:04 | 显示全部楼层
第一个文件看这个类声明就可以了!
第二个文件只需看第90行的一个函数定义!
最后看一下那个编译的结果!

      1 //string.h --- fixed and augmented string class definition
      2
      3 #include <iostream>
      4 using namespace std;
      5 #ifndef STRING_H_
      6 #define STRING_H_
      7 class String
      8 {
      9     private:
     10         char * str;
     11         int len;
     12         static int num_strings;
     13         static const int CINLIM = 80;   //cin input limit
     14     public:
     15         String(const char * s);
     16         String ();
     17         String(const String & );//copy constructor
     18         ~String();
     19         int length () const { return len; }
     20
     21         String & operator= (const String &);
     22         String & operator= (const char *);
     23         char & operator[] (int i);
     24         const char & operator[] (int i) const;
     25
     26         friend bool operator< (const String & st, const String & st2);
     27         friend bool operator> (const String & st, const String & st2);
     28         friend bool operator== (const String & st, const String & st2);
     29
     30         friend ostream & operator<< (ostream & os, const String & st);
     31         friend istream & operator>> (istream & is, String & st);
     32
     33         static int HowMany();
     34 };
     35 #endif



      1 //string.cpp --- string class methods
      2
      3 #include <iostream>
      4 #include <cstring>
      5 #include "string.h"
      6 using namespace std;
      7
      8 int String::num_strings = 0;
      9
     10 int String::HowMany()
     11 {
     12     return num_strings;
     13 }
     14
     15 String::String(const char * s)
     16 {
     17     len = strlen(s);
     18     str = new char [len+1];
     19     strcpy (str, s);
     20     num_strings++;
     21 }
     22
     23 String::String()
     24 {
     25     len = 4;
     26     str = new char [1];
     27     str[0] = '\0';
     28     num_strings++;
     29 }
     30
     31 String::String (const String & st)
     32 {
     33     num_strings++;
     34     len = st.len;
     35     str = new char [len+1];
     36     strcpy (str, st.str);
     37 }
     38
     39 String::~String()
     40 {
     41     --num_strings;
     42     delete [] str;
     43 }
     44
     45 String & String:perator= (const String & st)
     46 {
     47     if (this == &st)
     48         return *this;
     49     delete [] str;
     50     len = st.len;
     51     str = new char [len+1];
     52     strcpy (str, st.str);
     53     return *this;
     54 }
     55
     56 String & String:perator= (const char * s)
     57 {
     58     delete [] str;
     59     len = strlen (s);
     60     str = new char [len+1];
     61     strcpy (str, s);
     62     return *this;
     63 }
     64
     65 char & String:perator[] (int i)
     66 {
     67     return str;
     68 }
     69
     70 const char & String:perator[] (int i) const
     71 {
     72     return str;
     73 }
     74
     75 bool operator< (const String & st1, const String & st2)
     76 {
     77     return st2.str < st1.str;
     78 }
     79
     80 bool operator> (const String & st1, const String & st2)
     81 {
     82     return st2.str > st1.str;
     83 }
     84
     85 bool operator== (const String & st1, const String & st2)
     86 {
     87     return st2.str == st1.str;
     88 }
     89
     90 ostream & operator<< (ostream & os, String & st)
     91 {
     92     os << st.str;
     93     return os;
     94 }
     95
     96 istream & operator>> (istream & is, String & st)
     97 {
     98     char temp[String::CINLIM];
     99     is.get(temp,String::CINLIM);
    100     if (is)
    101         st = temp;
    102     while (is && is.get() != '\n')
    103         continue;
    104     return is;
    105 }


[linuxer@localhost CH12]$ g++ string.cpp
string.h: In function `std:stream& operator<<(std:stream&, String&)':
string.h:10: `char*String::str' is private
string.cpp:92: within this context
发表于 2003-8-15 09:44:01 | 显示全部楼层
30 friend ostream & operator<< (ostream & os, const String & st);

90 ostream & operator<< (ostream & os, String & st)

看到了吧?这样当然会出现这个问题了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表