发布网友 发布时间:2023-06-26 08:54
共2个回答
热心网友 时间:2023-10-11 01:27
派生类对象在被销毁时,其所有成员变量将被销毁需要通过改变静态成员变量。
静态成员变量在类装载的时候就进行了创建,在整个程序结束时按序销毁。实例变量在类实例化对象时候创建,在对象销毁的时候销毁。局部变量在局部范围使用时创建,跳出局部范围销毁。
车辆的种类虽然多,构造却大同小异。这应该说是标准化的功劳,也是大型生产流水线的需要。随着社会的发展、科技的进步和需求的变化,铁路车辆的外形开始有了改变,尤其是客车车厢不再是清一色的老面孔。但是它们的基本构造并没有重大的改变,只是具体的零部件有了更科学先进的结构设计。
一般来说,车辆的基本构造由车体、车底架、走行部、车钩缓冲装置和制动装置五大部分组成。
车体是车辆上供装载货物或乘客的部分,又是安装与连接车辆其他组成部分的基础。早期车辆的车体多以木结构为主,辅以钢板、弓形杆等来加强。近代的车体以钢结构或轻金属结构为主。
热心网友 时间:2023-10-11 01:28
可以这样销毁:编译器会自动生成一段你看不见的代码,调用完派生类的析构函数后,自动调用基类的析构函数。你可以断点调试体会一下,也可以在调试过程中跟踪反汇编看一下具体的过程。
“基类部分时自动销毁的”这句话不是太严谨。应该是编译器会调用基类的析构函数,才会导致基类部分自动销毁。
OOP有个重要的原——封装。这引申出来就是自己管好自己的东西。别人的东西不需要操心,也不要操心。回到问题上来,自己类中只需要销毁自己创建的东西,别人分配的东西别管,包括基类。如果设计出来的结构需要子类操心基类的内部逻辑,这就不符合封装的思想。这就是基类没有把应该做的事情做好。针对你这个问题,如果子类销毁了基类创建的东西,基类的析构函数又销毁,这就会出现问题了。
编译器在创建类时会保存一个继承树,销毁时,对于继承的类会按照树遍历轮流调用基类、基类的基类...的析构函数,然后再调用自身(即root)的析构函数(为什么顶端root是自身,因为c++是多继承,所以自身肯定处于继承链顶端)。
书本或者网上有很多例子,都会告诉你在每个基类或者继承类的析构函数中加入一段printf("xxx\n");来打印析构的消息,通过消息的先后来确定析构的先后,很普遍的例子。
当你理解这个机制以后,就没有什么顾虑了,以后写程序,不管这个类是基类还是继承类,只要这个类中显式定义了的成员变量,都要考虑析构中需不需要进行清理,而如果这个类是继承类,其中没有写出来的成员变量,也就是基类的成员变量,则不需要任何考虑,你唯一要做的是保证基类也按照这个原则,对它的成员变量进行了清理,那么继承类就完全无需考虑这些变量。