• c++day4


    写出三种构造函数,算术运算符、关系运算符、逻辑运算符重载尝

    1. #include
    2. #include
    3. using namespace std;
    4. class My_string
    5. {
    6. private:
    7. char *data;
    8. int size;
    9. public:
    10. //无参构造默认长度为15
    11. My_string();
    12. //有参构造
    13. My_string(const char *str);
    14. My_string(int n, char ch);
    15. //析构函数
    16. ~My_string();
    17. //拷贝构造函数
    18. My_string(const My_string &other);
    19. //拷贝赋值函数
    20. My_string & operator=(const My_string &other);
    21. //c_str函数
    22. const char *c_str();
    23. //size函数
    24. int size_t();
    25. //empty函数
    26. bool empty();
    27. //at函数
    28. char at(int i);
    29. // + 运算符
    30. const My_string operator+(const My_string &R)const;
    31. //实现+=运算符重载
    32. const My_string operator+=(const My_string &R)const;
    33. // == 运算符
    34. bool operator==(const My_string &R)const;
    35. //实现[]运算符重载
    36. char &operator[](int n);
    37. friend ostream &operator<<(ostream &L, const My_string &R); //输入
    38. friend istream &operator>>(istream &L, const My_string &R); //输出
    39. };
    40. //无参构造默认长度为15
    41. My_string::My_string():size(15)
    42. {
    43. data = new char[size];
    44. data[0] = '\0';
    45. }
    46. //有参构造
    47. My_string::My_string(const char *str)
    48. {
    49. int s = strlen(str);
    50. data = new char[s+1];
    51. data[0] = '\0';
    52. strcpy(data, str);
    53. }
    54. My_string::My_string(int n, char ch)
    55. {
    56. data = new char[n+1];
    57. data[0] = '\0';
    58. for(int i=0; i
    59. this->data[i] = ch;
    60. }
    61. data[n+1] = '\0';
    62. }
    63. //析构函数
    64. My_string::~My_string()
    65. {
    66. delete []data;
    67. data = nullptr;
    68. cout<<"析构函数:this = "<<this<
    69. }
    70. //拷贝构造函数
    71. My_string::My_string(const My_string &other)
    72. {
    73. int s = strlen(other.data);
    74. data = new char[s+1];
    75. data[0] = '\0';
    76. strcpy(this->data, other.data);
    77. }
    78. //拷贝赋值函数
    79. My_string & My_string::operator=(const My_string &other)
    80. {
    81. int s = strlen(other.data);
    82. data = new char[s+1];
    83. data[0] = '\0';
    84. strcpy(this->data, other.data);
    85. return *this;
    86. }
    87. //c_str函数
    88. const char* My_string::c_str()
    89. {
    90. return data;
    91. }
    92. //size函数
    93. int My_string::size_t()
    94. {
    95. return strlen(data);
    96. }
    97. //empty函数
    98. bool My_string::empty()
    99. {
    100. return strlen(data)==0?1:0;
    101. }
    102. //at函数
    103. char My_string::at(int i)
    104. {
    105. return data[i];
    106. }
    107. //实现+运算符重载
    108. const My_string My_string::operator+(const My_string &R)const
    109. {
    110. My_string temp;
    111. strcat(temp.data, this->data);
    112. strcat(temp.data, R.data);
    113. return temp;
    114. }
    115. //实现+=运算符重载
    116. const My_string My_string::operator+=(const My_string &R)const
    117. {
    118. strcat(this->data, R.data);
    119. return this->data;
    120. }
    121. //实现[]运算符重载
    122. char & My_string::operator[](int n)
    123. {
    124. return data[n];
    125. }
    126. //实现==运算符重载
    127. bool My_string::operator==(const My_string &R)const
    128. {
    129. return this->data == R.data;
    130. }
    131. //实现插入运算符的重载:
    132. ostream &operator<<(ostream &L, const My_string &R)
    133. {
    134. L<
    135. return L;
    136. }
    137. //实现提取运算符的重载:
    138. istream &operator>>(istream &L, const My_string &R)
    139. {
    140. L>>R.data;
    141. return L;
    142. }
    143. int main()
    144. {
    145. My_string s1; //无参构造
    146. My_string s2 = "hello world!"; //有参构造
    147. cout<<"s2 = "<
    148. My_string s3(5,'A');
    149. cout<<"s3 = "<
    150. My_string s4 = s2; //拷贝构造
    151. cout<<"s4 = "<
    152. s1 = s2; //拷贝赋值
    153. cout<<"s1 = "<
    154. printf("%s\n", s3.c_str());
    155. //cout<
    156. cout<<"size_t = "<size_t()<
    157. My_string ss1;
    158. if(ss1.empty()) {
    159. cout<<"空字符串!"<
    160. }
    161. else {
    162. cout<<"非空字符串!"<
    163. }
    164. cout<<"s1.at(1) = "<at(1)<
    165. cout<<"s1[1] = "<1]<
    166. My_string ss2 = s2 + " zhengqi";
    167. cout<<"ss2 = "<
    168. My_string ss3;
    169. cout<<"请输入ss3字符串>>>";
    170. cin>>ss3; //输入运算符
    171. cout<<"ss3 = "<
    172. My_string ss4 = "aaa";
    173. My_string ss5 = "aaa";
    174. bool bo = ss4 == ss5;
    175. cout<<"bool = "<
    176. s1 += s3;
    177. cout<
    178. return 0;
    179. }

    试实现自增、自减运算符的重载

  • 相关阅读:
    智慧农业大数据平台:农业中的“大智慧”
    Linux-Centos中配置docker
    企业架构HA-Keepalived服务器高可用
    Appium在小米11真机上进行微信自动化
    郴州等保测评中心电话是多少?在哪里?
    华为手机的10个使用技巧,你知道吗
    02【UML统一建模语言】
    CCF CSP认证 历年题目自练Day18
    论文:DeepAR: Probabilistic Forecasting with Autoregressive Recurrent Networks
    Android 数组适配器和简单适配器
  • 原文地址:https://blog.csdn.net/weixin_69331128/article/details/137246221