第24课 经典问题解析二

本文内容取自于对狄泰学院 唐佐林老师 C++深度解析 课程的学习总结

关于析构的问题

当程序中存在 多个对象 的时候,如
何确定这些对象的 析构顺序?

  • 单个对象 创建时构造函数的调用顺序
    1.调用父类的构造过程
    2.调用 成员变量的构造函数 (调用顺序与声明顺序相同)
    3.调用类自身的构造函数
析构函数与对应 构造函数调用顺序相反
  • 多个对象 析构时
    析构顺序构造顺序相反

实例分析
构造与析构顺序
#include <stdio.h>

class Member
{
    const char* ms;
public:
    Member(const char* s)
    {
        printf("Member(const char* s): %s\n", s);
        
        ms = s;
    }
    ~Member()
    {
        printf("~Member(): %s\n", ms);
    }
};

class Test
{
    Member mA;
    Member mB;
public:
    Test() : mB("mB"), mA("mA")
    {
        printf("Test()\n");
    }
    ~Test()
    {
        printf("~Test()\n");
    }
};

Member gA("gA");

int main()
{
    Test t;
    
    return 0;
}

运行结果
在这里插入图片描述


关于析构的答案

对于栈对象和全局对象,类似于入栈与出栈
的顺序, 最后构造的对象最先析构!!

堆对象 的析构发生在使用 delete的时候,
delete 的使用顺序相关!!


关于 const 对象的疑问

const
关键字能否 修饰类的对象?
如果可以, 有什么特性?


  1. const 关键字 能够 修饰对象
  2. const 修饰的对象为 只读对象
  3. 只读对象的 成员变量不允许被改变
  4. 只读对象是 编译阶段的概念,运行时生效
C++ 中的 const 成员函数
  1. const 对象 只能调用 const 的成员函数
  2. const 成员函数中 只有调用 const 成员函数
  3. const 成员函数中 不能直接改写成员变量的值
const 成员函数的定义:

在这里插入图片描述



关于类成员的疑问

成员函数成员变量 都是隶属于 具体对象 的吗?

面向对象的角度
  • 对象由 属性(成员变量)方法(成员函数)构成
程序运行 的角度
  • 对象由 数据 和 函数 构成
    • 数据可以位于栈,堆全局数据区
    • 函数只能位于 代码段

结论
  1. 每一个对象拥有自己独立的属性(成员变量)
  2. 所有的 对象共享类的方法(成员函数)
  3. 方法能够直接访问对象的属性
  4. 方法中的 隐藏参数 this 用于指代 当前对象



小结

对象的 析构顺序与构造顺序相反
const 关键字能修饰对象,得到 只读对象
只读对象只能调用 const 成员函数
所有对象共享类的成员函数
隐藏的 this 指针用于表示 当前对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lzg2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值