• 2024/4/25 C++day3


    1. #include
    2. using namespace std;
    3. class Person //Person类
    4. {
    5. string name; //两个私有属性变量name,age
    6. int age;
    7. public: //一个公有属性指针变量,一个无参构造函数,一个有参构造函数,一个show函数,一个拷贝构造函数
    8. int *p;
    9. Person():p(new int){}//一个无参构造函数
    10. Person(string name,int age):name(name),age(age),p(new int(10))//一个有参构造函数
    11. {cout << "Person的有参构造" << endl;}
    12. void show()//一个show函数
    13. {
    14. cout << "name = " << name << " age = " << age << endl;
    15. cout << "指针成员:" << p << "\t" << *p << endl;
    16. }
    17. ///拷贝构造函数仍然是申请空间的,所以指针成员直接指向堆区的空间
    18. Person(const Person &other):p(new int(*(other.p)))//一个拷贝构造函数
    19. {
    20. this->name = other.name;
    21. this->age = other.age;
    22. cout << "Person的拷贝构造函数" << endl;
    23. }
    24. ~Person()//一个析构函数
    25. {
    26. cout << p << endl;
    27. delete p;
    28. }
    29. //拷贝赋值函数没有初始化列表,返回自身的引用
    30. Person &operator=(const Person &other)//一个拷贝赋值函数
    31. {
    32. //如果传过来的就是类对象本身,不执行赋值操作
    33. if(&other!=this)
    34. {
    35. this->name = other.name;
    36. this->age = other.age;
    37. *(this->p) = *(other.p); //自己实现的深拷贝赋值
    38. cout << "Person的拷贝赋值函数" << endl;
    39. }
    40. return *this; //通过this指针返回自身的引用
    41. }
    42. };
    43. //fun函数的参数和返回值的位置都会调用拷贝构造函数
    44. Person fun(Person p)
    45. {
    46. return p;
    47. }
    48. int main()
    49. {
    50. Person p1("zhangsan",12);
    51. p1.show();
    52. Person p2;
    53. p2 = p1;
    54. p2.show();
    55. cout << *(p2.p) << endl;
    56. return 0;
    57. }

    1. #include
    2. #include
    3. using namespace std;
    4. class myString
    5. {
    6. private:
    7. char *str; //记录c风格的字符串
    8. int size; //记录字符串的实际长度
    9. public:
    10. myString():str(new char){}//无参构造
    11. myString(char *str,int size):str(new char(10)),size(size){cout<<"有参构造函数"<//有参构造
    12. myString(const myString &other):str(new char(*(other.str)))//一个拷贝构造函数
    13. {
    14. this->str = other.str;
    15. this->size = other.size;
    16. cout << "myString的拷贝构造函数" << endl;
    17. }//拷贝构造
    18. myString &operator=(const myString &other)//拷贝赋值函数
    19. {
    20. //如果传过来的就是类对象本身,不执行赋值操作
    21. if(&other!=this)
    22. {
    23. this->str = other.str;
    24. this->size = other.size;
    25. *(this->str) = *(other.str); //自己实现的深拷贝赋值
    26. cout << "myString的拷贝赋值函数" << endl;
    27. }
    28. return *this; //通过this指针返回自身的引用
    29. }
    30. //析构函数
    31. ~myString(){
    32. delete str;
    33. }
    34. void my_empty();
    35. //判空函数
    36. void my_size();//size函数
    37. void my_c_str();//c_str函数
    38. //at函数
    39. char at(int pos);
    40. };
    41. void myString::my_empty(){
    42. }
    43. void myString::my_size(){
    44. }
    45. void my_c_str(){
    46. }
    47. char myString::at(int pos){
    48. char s1=str[pos];
    49. return s1;
    50. }

  • 相关阅读:
    手机短信恢复 - 如何在 Android 手机上恢复删除的短信
    postgres 自定义内置函数
    【Python 2】列表 模式匹配 循环 dict set 可变对象与不可变对象
    Spring教程_编程入门自学教程_菜鸟教程-免费教程分享
    【App自动化测试】(九)移动端复杂测试环境模拟——来电、短信、网络切换
    svg VS canvas,哪种在移动端适配度更好?实战经历告诉你~
    c语言进阶篇:指针(四)
    计算机操作系统面试题库和答案
    双亲委派——就是个唬人的翻译
    【MySql】数据库的CRUD(增删查改)
  • 原文地址:https://blog.csdn.net/m0_67764503/article/details/138197303