1.关于虚函数的说法,哪些是正确的
正确答案: B C
A.构造函数中调用该类的虚函数,动态绑定机制会生效 B.静态函数不可以是虚函数 C.虚函数可以声明为inline D.构造函数和析构函数都可以声明为虚函数解析:1.虚函数实现运行时多态. 2. 静态函数属于类不属于对象,所以不可以是虚函数
3.虚函数可以声明为inline 但编译器并不会当成inline处理
4构造函数不可以 ,析构可以
为什么构造函数不能声明为虚函数?
构造一个对象必须知道其类型, 而虚函数是在运行态确定其类型,
构造一个对象时,必须知道对象实际类型,而虚函数是在运行期间确定实际类型的。而在构造一个对象时,由于对象还未构造成功,编译器就无法知道对象的实际类型,是该类本身,还是派生类,还是其他。
结果是:
#include <iostream>
using namespace std;
struct A{
A(){cout<<
"A::A"
<<endl;}
~A(){cout<<
"A::~A"
<<endl;}
};
struct B:
public
A{
B(){cout<<
"B::B"
<<endl;}
~B(){cout<<
"B::~B"
<<endl;}
};
int
main(){
A* a=
new
B;
delete a;
}
A::A
B::B
A::~A
如果将基类析构函数设为虚函数
基类的析构函数先调用子类的析构函数再去调用基类的析构函数
什么是虚函数?
实现多态! 通过基类访问派生类 让子类有各自的版本
本文含有隐藏内容,请 开通VIP 后查看