百日刷题--错题整理03day

发布于:2023-01-20 ⋅ 阅读:(329) ⋅ 点赞:(0)

1.关于虚函数的说法,哪些是正确的

正确答案: B C  

A.构造函数中调用该类的虚函数,动态绑定机制会生效
B.静态函数不可以是虚函数
C.虚函数可以声明为inline
D.构造函数和析构函数都可以声明为虚函数

解析:1.虚函数实现运行时多态. 2. 静态函数属于类不属于对象,所以不可以是虚函数  

3.虚函数可以声明为inline  但编译器并不会当成inline处理

4构造函数不可以 ,析构可以

为什么构造函数不能声明为虚函数?

   构造一个对象必须知道其类型, 而虚函数是在运行态确定其类型,
构造一个对象时,必须知道对象实际类型,而虚函数是在运行期间确定实际类型的。而在构造一个对象时,由于对象还未构造成功,编译器就无法知道对象的实际类型,是该类本身,还是派生类,还是其他。

构造函数不可以声明为虚函数,析构函数可以声明为虚函数_Tony_Xian的博客-CSDN博客_析构函数可以声明为虚函数吗构造函数不能声明为虚函数,而析构函数可以声明为虚函数,在有的情景下析构函数必须声明为虚函数。不建议在构造函数和析构函数里调用虚函数。构造函数不能声明为虚函数的原因?构造一个对象时,必须知道对象实际类型,而虚函数是在运行期间确定实际类型的。而在构造一个对象时,由于对象还未构造成功,编译器就无法知道对象的实际类型,是该类本身,还是派生类,还是其他。虚函数的执行依赖于虚函数表,而虚函数表是...https://blog.csdn.net/boiled_water123/article/details/105516386

结果是:

#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 后查看

网站公告

今日签到

点亮在社区的每一天
去签到