C++中的虚函数问题
2016-03-23 11:00
246 查看
1. 构造函数中可以调用虚函数吗
可以,只是不会产生动态行为,因为构造函数是从基类开始构造,基类在调用虚函数时,子类还未构造,所以调用的是基类的函数。
2.析构函数可以调用虚函数吗
如果在父类析构函数中调用虚函数,其实际调用的是子类的函数,而此时子类析构函数已经把数据销毁了,会出现不可知的结果。
3.析构函数可以调用纯虚函数吗
不可以,编译会出错。
5.析构函数可以是纯虚函数吗
可以,但是基类必须提供该析构函数的定义,此时基类是抽象类。抽象类的纯虚函数必须由派生类实现,除析构函数可以自身定义外。
6.普通成员函数可以调用虚函数吗
可以,如果基类和子类普通成员函数完全相同,子类会隐藏基类的成员函数,产生动态行为。
总结:C++动态绑定机制仅适用于完全构造的对象,构造和析构函数一样,对象不完整。 如果在部分构造的函数对象上动态绑定,行为很怪异(与实现有关)
可以,只是不会产生动态行为,因为构造函数是从基类开始构造,基类在调用虚函数时,子类还未构造,所以调用的是基类的函数。
2.析构函数可以调用虚函数吗
如果在父类析构函数中调用虚函数,其实际调用的是子类的函数,而此时子类析构函数已经把数据销毁了,会出现不可知的结果。
3.析构函数可以调用纯虚函数吗
不可以,编译会出错。
5.析构函数可以是纯虚函数吗
可以,但是基类必须提供该析构函数的定义,此时基类是抽象类。抽象类的纯虚函数必须由派生类实现,除析构函数可以自身定义外。
6.普通成员函数可以调用虚函数吗
可以,如果基类和子类普通成员函数完全相同,子类会隐藏基类的成员函数,产生动态行为。
总结:C++动态绑定机制仅适用于完全构造的对象,构造和析构函数一样,对象不完整。 如果在部分构造的函数对象上动态绑定,行为很怪异(与实现有关)
相关文章推荐
- leetcode 280: Wiggle Sort
- C++ Function call operator
- C++线性表
- C语言基础学习-变量
- C字符串和C++字符串
- VC6中如何让改变控件Botton的字体(大小和字体)
- C++ 哈希表 线性探测 二次探测 哈希桶
- 《21天学通C++》读书笔记,名字很奇怪,但写的还蛮好,
- C++的|、||、&、&&、异或、~、!运算
- C++PRIMER 学习笔记
- Qt Creator调用C语言编译的.So动态库
- 抛出异常与栈展开(stack unwinding)
- c++的重载、覆盖和遮蔽(隐藏)
- C语言第五篇:位运算
- [Leetcode 286]: Walls and Gates
- 三天打鱼两天晒网 C++ / Java
- c++ 重写string类 MyString
- 与LSGO一起学“第1章 初识C++(1.6Visual Studio 2010编译器)”
- 与LSGO一起学“第1章 初识C++(1.5 C++与其他语言的区别)”
- 与LSGO一起学“第1章 初识C++(1.4学习C++之前需要先学C吗?)”