• C语言日记 34 析构函数


    上一节的:

    例8-9构造函数重载。(其实应该放到 C语言日记 33 构造函数,但析构函数可以讲的内容太少了)

    源程序:

    1. #include
    2. using namespace std;
    3. class Box
    4. {
    5. private:
    6. int height; int width; int length;
    7. public:
    8. Box();
    9. Box(int h);
    10. Box(int h, int w);
    11. Box(int h, int w, int len);
    12. int Volume();
    13. };
    14. Box::Box()
    15. {
    16. height = 10; width = 10; length = 10;
    17. }
    18. Box::Box(int h)
    19. {
    20. height = h; width = 10; length = 10;
    21. }
    22. Box::Box(int h, int w)
    23. {
    24. height = h; width = w; length = 10;
    25. }
    26. Box::Box(int h, int w, int len) :height(h), width(w), length(len)
    27. //用参数的初始化表对数据成员初始化
    28. {
    29. }
    30. int Box::Volume()
    31. {
    32. return (height * width * length);
    33. }
    34. int main()
    35. {
    36. Box boxl;//没有给实参
    37. Box box2(15);//只给定一个实参
    38. cout << "The volume of boxl is " << boxl.Volume() << endl;
    39. cout << "The volume of box2 is " << box2.Volume() << endl;
    40. Box box3(15, 30); //只给定 2 个实参
    41. cout << "The volume of box3 is " << box3.Volume() << endl;
    42. Box box4(15, 30, 20); //给定 3 个实参
    43. cout << "The volume of box4 is " << box4.Volume() << endl;
    44. return 0;
    45. }

    结果:

    The volume of boxl is 1000
    The volume of box2 is 1500
    The volume of box3 is 4500
    The volume of box4 is 9000

    用参数的初始化表对数据成员初始化 

    是什么东西?

    详见28 类和对象-对象特性-初始化列表_哔哩哔哩_bilibili

    析构函数

     例8-10:

    1. #include
    2. #include
    3. using namespace std;
    4. class Student//声明 Student类
    5. {
    6. private:
    7. int num;
    8. string name;
    9. char sex;
    10. public:
    11. Student(int n, string nam, char s)//定义构造函数
    12. {
    13. num = n;
    14. name = nam;
    15. sex = s;
    16. cout << "Constructor called." << endl; //输出有关信息
    17. }
    18. ~Student() //定义析构函数,输出有关信息
    19. {
    20. cout << "Destructor called. The num is " << num << "." << endl;
    21. }
    22. void display()//定义成员函数
    23. {
    24. cout << "num:" << num << endl;
    25. cout << "name:" << name << endl;
    26. cout << "sex:" << sex << endl << endl;
    27. }
    28. };
    29. int main()
    30. {
    31. Student stud1(10010, "Wang_li", 'f'); //建立对象 studl
    32. stud1.display();//输出学生 1 的数据
    33. Student stud2(10011,"zhang_fun",'m');//定义对象 stud2
    34. stud2.display();//输出学生 2的数据
    35. return 0;
    36. }

    Constructor called:已调用构造函数

    call:表调用,意思形式与其中的“传唤,传召(到法庭或官方委员会);”意思相似(类似、相近)

    Destructor:破坏者

    display:显示;表现;炫耀;陈列;

     结果:

    整个程序运行规则逻辑如下:

    1. 给对象分配存储空间
    2. 构造函数先行(打头阵),初始化
    3. 主函数登场,干活做事
    4. 析构函数断后(对程序内的每一个对象都进行释放清除操作)
    5. 释放对象(所占的)的存储空间

    另外我们需要注意:

    不管是析构函数还是构造函数,其定义(这俩玩意没有声明)位置空间都在类的公有成员里面(内) 

    在定义完了类中全部public的函数(及其他,目前根据我们学到的在类的公有属性区域好像除了函数里面也没别的啥东西了)以后

    结尾最后花括号“}”结尾时,注意别忘了后面还要打上分号

  • 相关阅读:
    HTTP中的Cookie、Set-Cookie
    学习总结1
    Vue3学习(十六)- 左侧显示分类菜单
    Spring概述以及IoC和DI的使用
    JDK9相比于JDK8,究竟变强了多少
    故障分析 | Greenplum 集群 standby 故障处理
    GB28181 编码规则说明
    如何设计软件架构:重要技巧和最佳实践
    【SpringBoot】配置文件.properties和.yml
    【STM32】DMA初步使用
  • 原文地址:https://blog.csdn.net/Zz_zzzzzzz__/article/details/127806814