定义
类型兼容规则是指在需要基类对象的任何地方, 都可以使用公有派生类的对象来替代。
类型兼容规则中所指的替代包括以下的情况:
- 派生类的对象可以隐含转换为基类对象;
- 派生类的对象可以初始化基类的引用;
- 派生类的指针可以隐含转换为基类的指针;
在替代之后, 派生类对象就可以作为基类的对象使用, 但只能使用从基类继承的成员。
可以说, 类型兼容原则是多态性的重要基础之一。
示例1
1 2 3 4
| class B{}; class D : public B {}; B b, *pb; D d;
|
此时:
- 派生类对象可以隐含转换为基类对象, 即用派生类对象中从基类继承来的成员逐个赋值给基类对象的成员;
b=d;
- 派生类的对象也可以初始化基类对象的引用;
B& rb = d;
- 派生类对象的地址也可以隐含转换为指向基类的指针;
pb = &d;
示例2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #include <iostream> using namespace std;
class Base1{ protected: int _val; public: Base1(int val) : _val(val) {} void display() const { cout << "Base1 val: " << _val << endl; } };
class Base2 : public Base1{ public: Base2(int val) : Base1(val) {} void display() const { cout << "Base2 val: " << _val << endl; } };
class Derived : public Base2{ public: Derived(int val) : Base2(val) {} void display() const { cout << "Derived val: " << _val << endl; } };
void func(Base1 * ptr){ ptr->display(); }
int main(void){ Base1 b1(2); Base2 b2(3); Derived d(4);
func(&b1); func(&b2); func(&d); b1.display(); b2.display(); d.display();
return 0; }
|
版权声明: 此文章版权归金晖のBlog所有,如有转载,请注明来自原作者