类的多态性原理以及new的问题(个人笔记)

1.类的多态性原理(虚函数表)

在C++11中可以使用override关键字验证是否覆盖成功

拥有虚函数的类,会拥有一份虚函数表,此类中所有的对象共享这一张表,这些对象内部会增加一个隐藏的成员变量:虚函数表指针,指向虚函数表。可以使用sizeof运算符观察此指针的存在

当派生类继承了拥有虚函数的基类后,也会继承虚函数表,如果此时派生类覆盖了基类中的虚函数,则会修改这样表的内容为新的函数内容

如果派生类中新增了新的虚函数,则会在表的尾部新增此函数

每个类型对象的虚函数表指针都指向自己类的虚函数表。因此代码在运行阶段,可以通过查询这个虚函数表,来找到对应的类型应该调用的函数地址。\n多态与继承一样,提高了代码的编码效率,牺牲了一部分执行效率。

2.关于在类的使用中new带不带括号的问题

B是一个类:

1)new B

如果不加括号,用户自定义了默认构造函数,new创建对象的时候会调用自定义的默认构造函数;用户没有自定义默认构造函数,new创建的对象就不会初始化(申请内存后不置零).

2)new B()

带括号不带参数的话,如果用户自定义了默认构造函数,new创建出的对象就会调用默认构造函数进行初始化,如果用户没有自定义默认构造函数,系统就会调用系统默认构造函数对new出来的对象进行初始化。

3)new B(参数)

带括号带参数,如果类中用户自定义了带参数的构造函数,就可以在括号里带参数进行初始化。

总结:最好不要用不带括号的new。

下面是网上的文章里的结论和证明的代码,方便理解

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值