c++的继承与多态
继承与多态
继承的本质:代码的复用
1)派生类的内存布局,都继承了基类的什么。
2)继承来的东西的访问限定:
3)派生类对象的构造顺序
4)派生类和基类同名成员方法的关系:
重载:作用域相同,函数名相同,参数列表不同的函数。
隐藏:继承结构中,派生类隐藏了与基类同名的函数。(隐藏基类,优先调用自己的)
覆盖:基类有与派生类同名的函数,返回值相同,参数列表相同。并且基类的函数为虚函数。则基类的虚函数会覆盖派生类的函数。
5)基类对象和派生类对象能否互相赋值和引用
Base b; Derive d;
基类对象---》派生类对象 例:d=b; //error 因为派生类对象包含基类成员和派生类成员。会造成派生类的成员部分没有赋值
派生类对象---》基类对象 例:b=d; //正确 因为派生类对象包含了基类成员的那部分,则可以赋值。 (编译器默认的支持自下向上的转换)
基类对象的指针/引用----》派生类对象 例:Base *pa=&d; //正确 但是指针接引用不能访问派生类的成员。因为指针的类型为Base*
派生类对象的指针/引用----》基类对象 例:Derive *pb=&b;//error
6)虚函数和多态
7)什么情况下产生多态的调用:使用指针和引用指向不同于该指针类型的对象的时候。
8)纯虚函数和抽象类
抽象类:拥有纯虚函数的类为抽象类,抽象类不能定义对象,可以定义指针/引用。