原文:多态基类的析构函数应该为虚函数

CBird作为基类描述鸟类的一般行为和属性,因为不同鸟类的飞行特点不同,所以基类CBird将fly 声明为virtrual,希望派生类重写 overriding 该方法。CLark lark:百灵鸟 继承自CBird,并重写了fly 。 main函数中基类CBird类型指针指向派生类CLark类型对象,并以基类指针调用fly方法,根据c 的多态特性,实际调用的是CLark的fly方法。 可以看到 ...

2013-03-12 09:37 0 3813 推荐指数:

查看详情

为什么基类析构函数函数

注:本文章内容大部分来自网站整理。 1.为什么基类析构函数函数?   在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生。   下面转自网络:源地址 http://blog.sina.com.cn/s/blog_7c773cc50100y9hz.html ...

Wed Jul 11 00:06:00 CST 2012 0 5171
(C++)浅谈多态基类析构函数声明为函数

主要内容: 1、C++类继承中的构造函数析构函数 2、C++多态性中的静态绑定和动态绑定 3、C++多态性中析构函数声明为函数 1、C++类继承中的构造函数析构函数 在C++的类继承中, 建立对象时,首先调用基类的构造函数,然后在调用下一个派生类的构造函数,依次类推 ...

Mon Jun 15 06:06:00 CST 2015 1 4298
多态中的析构函数

为什么析构函数要声明成virtual呢? 因为,如果delete一个基类的指针时, 如果它指向的是一个子类的对象,那么析构函数不为就会导致无法调用子类析构函数,从而导致资源泄露。 如果一个类要被使用成多态的,那么这个virtual是必须的。比如: delete pa 实际上 ...

Fri Aug 30 20:51:00 CST 2019 0 595
为什么基类析构函数要写成函数

为什么基类析构函数要写成函数? 答:在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生。 代码说明如下 第一段代码: 运行结果: Do something in class ClxDerived! Output from ...

Tue May 08 20:22:00 CST 2018 0 1011
C++基类析构函数定义为函数的原因

1:每个析构函数只会清理自己的成员(成员函数前没有virtual)。2:可能是基类的指针指向派生类的对象,当析构一个指向派生类的成员的基类指针,这时程序不知道这么办,可能会造成内存的泄露,因此此时基类析构函数要定义为函数基类指针可以指向派生类的对象(多态),如果删除该指针delete[]p ...

Tue Feb 19 20:00:00 CST 2019 0 934
C++中基类析构函数为什么要用virtual析构函数

知识背景 要弄明白这个问题,首先要了解下C++中的动态绑定。 关于动态绑定的讲解,请参阅: C++中的动态类型与动态绑定、函数多态实现 正题 直接的讲,C++中基类采用virtual析构函数是为了防止内存泄漏。具体地说 ...

Wed Aug 31 18:32:00 CST 2016 1 33099
c++为什么基类析构函数要写成析构函数

答:在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生。 代码说明如下 第一段代码: 运行结果: Do something in class ClxDerived! Output from the destructor ...

Sun May 10 01:39:00 CST 2020 0 631
构造函数为什么不能为函数 & 基类析构函数为什么要为函数

一、构造函数为什么不能为函数 1. 从存储空间角度,函数相应一个指向vtable函数表的指针,这大家都知道,但是这个指向vtable的指针事实上是存储在对象的内存空间的。问题出来了,假设构造函数的,就须要通过 vtable来调用,但是对象还没有 ...

Wed Oct 08 23:41:00 CST 2014 0 3998
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM