C++构造函数和析构函数能否继承
来源:互联网 发布:java线程池状态 编辑:程序博客网 时间:2024/05/18 15:26
前段时间,一个同事问了一个问题,C++类中的构造函数析构函数派生的子类能否继承?这个问题以前真的没有注意过,按道理来讲应该说可以的,但是本着求证的态度写了一段测试代码:
#include <map>#include <list>using namespace std;class CTest{protected:
/*CTest(){printf("construct CTest\n");}
*/public:virtual ~CTest(){printf("Test\n");}};class CTest2: public CTest{public:void Add(){CTest::~CTest();}};void main(){CTest2 Test;Test.Add();}
测试结果:
显示调用了析构函数,析构函数被继承了。
关于构造函数能否被继承,还真的不是很好验证,因为构造函数只能够隐式被调用。需要怎么去验证了,我做了个方法处理,代码如下:
#include <map>#include <list>using namespace std;class CTest{<span style="color:#ff0000;">protected:CTest(){printf("construct CTest\n");}</span>public:virtual ~CTest(){printf("Test\n");}};class CTest2: public CTest{public:void Add(){<span style="color:#ff0000;">CTest *lpTest = new CTest;</span>CTest::~CTest();}};void main(){CTest2 Test;Test.Add();//int nChars = getchar();}
红色的部分就是新增加的代码:将基类的构造函数变为protected属性。如果构造函数能够被继承,那么在CTest2里面应该是编译通过的,开始进行编译,编译出错,提示
error C2248: 'CTest::CTest' : cannot access protected member declared in class 'CTest',果然编译通不过。
得出结论:
析构函数被继承过来了,但是构造函数不能够继承,我们在子类里面只是”调用“基类的构造函数。
0 0
- C++构造函数和析构函数能否继承
- C++:构造函数和析构函数能否为虚函数
- C++:构造函数和析构函数能否为虚函数
- C++:构造函数和析构函数能否为虚函数
- C++:构造函数和析构函数能否为虚函数
- C++:构造函数和析构函数能否为虚函数
- 构造函数和析构函数能否是虚函数
- C++-继承:构造函数和析构函数
- 构造函数能否被继承,为什么?
- java构造函数能否被继承,为什么?
- 构造函数和析构函数,在C++中能否声明为虚函数?构造函数和析构函数里面能否调用虚函数?
- 继承中的构造和析构函数
- 构造函数和析构函数能否声明为虚函数?
- 构造函数和析构函数能否声明为虚函数?
- 构造函数和析构函数能否声明为虚函数?
- 构造函数和析构函数能否声明为虚函数?
- 构造函数和析构函数能否声明为虚函数?
- 构造函数和析构函数能否声明为虚函数?
- UGUI内核大探究(六)CanvasUpdateRegistry
- 线程的互斥与同步通信
- java面试题(9月15日)
- JDBC开发之数据库连接池
- hive基础知识(hive 0.1.4)
- C++构造函数和析构函数能否继承
- JDBC连接Oracle数据库
- Java配置文件Properties的读取、写入与更新操作
- 设计模式之-原型模式
- Linux笔记--vim的基本常用操作总结
- 思维导图复习强化数据结构(持续更新)
- npm之小菜鸟的探索
- ZX 123
- unexpected-top-level-exception