c++ 类的继承与派生 题存疑

在两个图片里为什么结果成这样的顺序,有没有人可以解答一下呀,我不是这个专业的看不明白555

img

img

你不是专业的,记住一个结论就行了,构造函数先构造基类,再构造派生类,析构函数,先调用派生类,再调用基类
这好比盖房子,先盖地基,再盖上面的。拆房子先拆上面的,再拆地基。

上面大佬回答了最精简的答案,那我就从代码的角度说一下吧

  1. 什么是构造函数,什么是析构函数?
    构造函数和析构函数是 C++ 类中的两个特殊成员函数,用于在对象生命周期的两个不同阶段执行初始化和清理工作。
    构造函数的作用是在创建对象时对其进行初始化。它的名字与类名相同,没有返回值,可接受参数,可以重载。当对象被创建时,构造函数会被自动调用。如果没有显式定义构造函数,则会使用默认构造函数进行初始化。
    析构函数的作用是在对象生命周期结束时对其进行清理和释放。它的名字以波浪线(~)开始,后面跟着类名,没有参数和返回值,也可以重载。当对象被删除或超出范围时,析构函数会被自动调用。在对对象进行显式删除之后,系统将回收分配给该对象的内存空间。
    通俗地来说,构造函数就像是做一个蛋糕的厨师,他在制作蛋糕时为了让食材更好地混合在一起,需要进行一些初始化操作;而析构函数就像是这位厨师在厨房洗碗,将所有用过的餐具都进行清理并放回原处。在 C++ 中,我们通过构造函数完成对象的初始化,通过析构函数完成对象的清理,两者组合起来就能满足我们对于对象的需求。

  2. 关于题目所问
    这个程序首先在 main 函数中创建了一个名为 b 的 AA 指针,指向一个新创建的 CC 对象。CC 类构造函数被调用,并输出一条信息。然后,这个指针被传递给 myFun 函数,这个函数删除了 c 指向的对象。因为 CC 类是从 AA 类继承而来的,所以它会自动调用基类 AA 析构函数,并输出相应的信息。
    注意,虽然 CC 类自己也有一个析构函数,但是如果没有声明为虚函数,当用基类指针删除子类对象时,只会调用基类析构函数而不调用子类析构函数。而将基类的析构函数声明为虚函数后,即可保证释放派生类对象时按正确个序调用派生类和基类的析构函数。
    因此,在这个例子中,我们可以看到程序首先调用了 AA 类的构造函数,然后调用了 CC 类的构造函数,表示这个对象被正确地创建了。接下来,当我们使用 delete 操作符删除指针时,首先调用了 AA 类的析构函数,然后输出了 AA 类的析构函数信息。最后,程序结束并返回。

与类名一致的是构造函数,前边额外加一个波浪号 ~ 的是析构函数