爱立信面试

本文讨论了C++中构造函数为何不能是虚函数,析构函数为何需要是虚函数的原因,以及在多重继承中虚拟继承的作用。通过示例解释了如何解决菱形继承问题,确保成员函数的唯一性。此外,还介绍了电梯算法,探讨了电梯运行状态的管理及其请求处理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 构造函数能否是虚函数?
多态:根据对象的动态类型来选择要调用的方法。而在构造函数之前,对象甚至都不存在。
构造函数不能是虚函数,在创建一个对象的时候,构造函数需要的是它要创建的对象的准确的类型,所以不能是虚函数。除此之外,构造函数并不是一般的函数,它跟内存管理的交互方式不同于一般的成员函数,所以不能用指针指向构造函数。
vtable是在构造函数中才初始化的,找不到vtable就不可能调用。
析构函数可以是虚函数,而且常常如此,由于通常通过基类的指针来销毁对象,如果析构函数不为虚的话,就不能正确识别对象类型,从而不能正确销毁对象。
解释:在类的继承中,如果有基类指针指向派生类,那么用基类指针delete时,如果不定义成虚函数,派生类中派生的那部分无法析构。
class   A
{
public:
A();
      virtual   ~A();
};
A::A()
{
}
A::~A()
{
      printf("Delete   class   AP/n");
}

class   B   :   public   A
{
public:
      B();
      ~B();
};

B::B()
{   }
B::~B()
{
      printf("Delete   class   BP/n");
}

int   main(int   argc, &nbs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值