灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:11847回复:1

C++ 字符串重载运算符

楼主#
更多 发布于:2015-03-17 08:33

文章作者:爷就是这个范儿

01.#include<iostream.h>  

02.#include<string.h>  

03.//using namespace std;  

04.class Cstring  

05.{  

06.public:  

07.    Cstring()  

08.    {  

09.        p = new char[1];  

10.        *p = '';  

11.    }  

12.    Cstring(const char *t);  

13.    Cstring(const Cstring &t);  

14.    ~Cstring()  

15.    {  

16.        delete[]p;  

17.    }  

18.    bool operator<(const Cstring &t)const;  

19.    friend bool operator > (const Cstring &str1,const Cstring &str2);  

20.    Cstring& operator=(const Cstring &t);  

21.    Cstring operator+(const Cstring &t)const;  

22.    bool operator==(const Cstring &t)const;  

23.    char& operator[](int index);  

24.      

25.    void Show()  

26.    {  

27.        cout<<p<<endl;  

28.    }  

29.private:  

30.    char *p;  

31.};  

32.  

33.Cstring::Cstring(const char *t)  

34.{  

35.    if(t == NULL)  

36.        t = "";  

37.    int n = strlen(t);  

38.    p = new char[n+1];  

39.    strcpy(p,t);  

40.}  

41.Cstring::Cstring(const Cstring &t)  

42.{  

43.    p = new char[strlen(t.p)+1];  

44.    strcpy(p,t.p);  

45.}  

46.bool Cstring::operator <(const Cstring &t)const  

47.{  

48.    if(strcmp(p, t.p) < 0)    

49.        return true;                                                  

50.    else return false;  

51.}  

52.bool operator > (const Cstring &str1, const Cstring &str2)  

53.{  

54.    if(strcmp(str1.p, str2.p) > 0)    

55.        return true;                                                  

56.    else return false;  

57.}  

58.bool Cstring::operator ==(const Cstring &t)const  

59.{  

60.    return strcmp(p,t.p) == 0;  

61.}  

62.char& Cstring::operator [](int index)  

63.{  

64.    return p[index];  

65.}  

66.Cstring Cstring::operator +(const Cstring &t)const  

67.{  

68.    char *pt;  

69.    pt = new char[strlen(p)+strlen(t.p)+1];  

70.    strcpy(pt,p);  

71.    strcat(pt,t.p);  

72.    Cstring temp(pt);  

73.    delete[]pt;  

74.    return temp;  

75.}  

76.Cstring& Cstring::operator =(const Cstring &t)  

77.{  

78.    if(this == &t)  

79.        return *this;  

80.    delete[]p;  

81.    p = new char[strlen(t.p)+1];  

82.    strcpy(p,t.p);  

83.    return *this;  

84.}  

85.  

86.void main()  

87.{  

88.    Cstring s1("Hello");  

89.    Cstring s2("World");  

90.    Cstring s3;  

91.    s1.Show();  

92.//  if(s1[0]>='A' &&s1[0]<='Z')  

93.//      s1[0] = s1[0]+32;  

94.//  s1.Show();  

95.    cout <<(s1>s2)<<endl;  

96.    cout <<(s1<s2)<<endl;  

97.    s3 = s1;  

98.    s3.Show();  

99.    s3 = s1+s2;  

100.    s3.Show();  

101.}  

 

在VC6.0下如果将头文件改为:

 

#include<iostream>

 #include<string.h>

 using namespace std;

 

就会出现下列错误

 

error C2248: 'p' : cannot access private member declared in class 'Cstring'


喜欢1 评分0

最新喜欢:

rexczjrexczj
rexczj
新手上路
新手上路
  • 注册日期2015-10-13
  • 发帖数6
  • QQ319448989
  • 火币12枚
  • 粉丝0
  • 关注0
沙发#
发布于:2015-10-13 11:04
看的人多,回话的人没有

回复(0) 喜欢(0)     评分
游客

返回顶部