C++基础一

                c++基础一

1.多态的实现原理

c++中的多态分为静态多态和动态多态。
静态多态是编译时的多态,通过重载函数和模板实现。
动态多态是运行时的多态,通过虚函数和继承实现。


动态多态实现原理:为每个包含虚函数的类建立一个虚函数表。
虚函数表的项存储各个虚函数在内存中的入口地址。
在该类的每个对象中设置一个指向虚函数表的指针。
在调用虚函数时,先利用虚指针找到虚函数表,确认调用的虚函数的入口地址在表中的位置,获取入口地址后完成调用

静态多态的实现原理:
    函数重载:编译器用过函数调用的时候传递的参数类型和数量来确定合适的函数版本。
         在编译阶段,编译器检查函数调用的上下文,通过实际参数确定调用重载版本
    模板:模板允许我们编写通用的代码。编译器根据模板实例化的类型生成对应的代码

2.菱形继承问题
菱形继承问题是指在多重继承时,两个或多个派生类继承自同一个基类,然后又有另一个类继承这些派生类。
这种情况下,最终生成的派生类将包含多个来自同一个基类的子对象副本,导致二义性和资源浪费。
为了解决这个问题:可以使用虚继承,让最终生成的派生类只包含一个基类的子对象副本
菱形继承下的虚函数:若子类中有虚函数,而所继承的父类中没有虚函数,则子类就有自己的虚表指针。当父类中有虚函数,则子类的虚表放在 第一个继承的父类中。

3.析构函数为什么设置成虚函数
一般来说,如果这个类是一个带有多态性质的类,那么它的析构函数就应该是虚函数,否则就不应该是虚函数。
原因是,如果这个类是有虚函数,那它很可能会被继承。当通过父类指针指向子类对象时,在父类对象销毁时,
如果它的析构函数不是虚函数,那么只有父类的析构函数会被调用,子类析构函数不会调用。造成内存的局部释放,
导致资源泄露

4.static和const对象的用法’
const