构造函数,析构函数,虚函数等易错混淆点

1.构造函数是否可以是虚函数?析构函数呢?

答:构造函数不可以,虚函数是借助于虚函数表,而且是通过虚函数指针找到虚函数表,然而虚函数指针存在于对象之中,要有个对象才行,而调用构造函数的时候对象还没有建立,没有建立怎么会有虚函数指针呢?所以不可以。

    析构函数可以当一个父类的析构函数被声明为虚函数的时候,我们delete一个指向子类对象的父类指针的时候,实际调用的是子类的析构函数,但是子类析构函数会自动引发父类的析构函数的调用,从而使子类特有的部分和从父类继承的部分能够释放,我们一般把父类的析构函数声明成虚函数,尽管这个析构函数什么都不做。(最好是把基类的析构函数定义为虚函数,否则当用基类去创建一个指向派生类的指针,当其释放的时候基类中的东西可能不会被释放,造成内存泄漏)

2..虚函数是否可以是内联函数?

答:不可以,虚函数是通过虚函数表,这是在运行的时候确定的,然而内联函数的替换是在编译阶段,编译的时候不知道调用哪一个虚函数所以不可以。(编译时静态的,运行是动态的)

3.静态成员函数是否可以是虚函数?

答:不可以,静态成员函数不属于哪个类,而虚函数通过虚函数指针找到虚函数表,虚函数依赖于对象指针,而静态函数不属于某各类,所以不可以。

4.虚函数表和虚函数指针在运行,编译时建立?

答:虚函数表是在编译时建立,在编译的时候把类中的虚函数地址放到虚函数表中,构成一个指针数组。

虚函数指针是在运行时建立的,他也是类的隐藏的成员,他在调用构造函数的时候执行,构造函数执行完以后虚函数指针初始化好(构造函数在运行时调用的)

5.什么是虚函数?纯虚函数?什么是抽象类?纯抽象类?

答:虚函数:被virtual修饰的成员函数。(构造函数,静态成员函数和全局函数不能被声明为虚函数)

纯虚函数:virtual  函数返回值 函数名()= 0

抽象类:有纯虚函数的类是抽象类。(不能创建抽象类的对象,当做一个接口类使用)

纯抽象类:除了构造函数与静态成员函数意外都是纯虚函数的类。

6.析构函数是否可以重载?

答:不可以,因为它没有参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zero游戏开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值