• 23062C++&QTday4


    仿照string类,完成myString 类

    代码:

    1. #include
    2. #include
    3. using namespace std;
    4. class myString
    5. {
    6. private:
    7. char *str; //记录c风格的字符串
    8. int size; //记录字符串的实际长度
    9. public:
    10. //无参构造
    11. myString():size(10)
    12. {
    13. str = new char[size]; //构造出一个长度为10的字符串
    14. strcpy(str,""); //赋值为空串
    15. }
    16. //有参构造
    17. myString(const char *s) //string s("hello world")
    18. {
    19. size = strlen(s);
    20. str = new char[size+1];
    21. strcpy(str, s);
    22. }
    23. //拷贝构造
    24. myString(const myString &other)
    25. {
    26. size=other.size;
    27. str= new char[size];
    28. strcpy(str,other.str);
    29. }
    30. //析构函数
    31. ~myString()
    32. {
    33. delete[] str;
    34. }
    35. //拷贝赋值函数
    36. myString & operator=(const myString &other)
    37. {
    38. if(this != &other) //确定不是自己给自己赋值
    39. {
    40. this->size = other.size;
    41. //判断原来指针空间释放被清空
    42. if(this->str != NULL)
    43. {
    44. delete this->str;
    45. }
    46. this->str = new char(*other.str);
    47. }
    48. cout<<"拷贝赋值函数"<
    49. return *this; //返回自身引用
    50. }
    51. //判空函数
    52. bool string_empty()
    53. {
    54. return size==0;
    55. }
    56. //size函数
    57. unsigned long long int string_size()
    58. {
    59. return strlen(str);
    60. }
    61. //c_str函数
    62. const char* c_str(const myString s1)
    63. {
    64. char *p=new char[s1.size+1];
    65. strcpy(p,s1.str);
    66. return p;
    67. }
    68. //at函数
    69. char &at(int pos)
    70. {
    71. if(pos>=0&&pos<this->size)
    72. {
    73. return str[pos];
    74. }
    75. else
    76. {
    77. cout<<"数据输入错误"<
    78. return str[0];
    79. }
    80. }
    81. //加号运算符重载
    82. const myString operator+ ( const myString &R)const
    83. {
    84. myString s;
    85. s.size = this->size + R.size;
    86. strcpy(s.str,this->str);
    87. strcat(s.str,R.str);
    88. return s;
    89. }
    90. //加等于运算符重载
    91. myString & operator+=(const myString &R)
    92. {
    93. this->size += R.size;
    94. strcat(this->str,R.str);
    95. return *this; //返回自身的引用
    96. }
    97. //关系运算符重载(>)
    98. bool operator>(const myString &R)const
    99. {
    100. if(strcmp(this->str,R.str)>0)
    101. {
    102. return 1;
    103. }
    104. else
    105. {
    106. return 0;
    107. }
    108. }
    109. //中括号运算符重载
    110. char & operator[](int index)
    111. {
    112. return this->str[index];
    113. }
    114. };
    115. int main()
    116. {
    117. myString s1("hello");
    118. string s2="world";
    119. string s3="war";
    120. myString s4("world");
    121. cout<string_size()<
    122. cout<at(2)<
    123. s2+=s3;
    124. cout<
    125. cout<
    126. if(s1 > s4) //调用关系运算符重载函数
    127. {
    128. cout<<"yes"<
    129. }else
    130. {
    131. cout<<"no"<
    132. }
    133. return 0;
    134. }

    运行结果:

    思维导图

     

  • 相关阅读:
    【lwip】08-ARP协议一图笔记及源码实现
    HTML5期末考核大作业,网站——青岛民俗 7页。 美丽家乡 学生旅行 游玩 主题住宿网页
    湖南麒麟两种修复硬盘方式
    【踩坑专栏】禁止kafka自带的日志
    AI黑科技:名片识别革命,一键get轻松
    模拟退火算法
    yolo的一个ui界面中做一个摄像头检测的功能
    Dynamsoft Label Recognizer SDK FOR .CPP.NET
    【js学习笔记五十四】BFC方式
    【​毕业季·进击的技术er​】--毕业到工作小结
  • 原文地址:https://blog.csdn.net/cwj442257772/article/details/132817025