|

楼主 |
发表于 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 |
|