在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
赋值兼容规则是指在需要基类对象的任何地方都可以使用公有派生类的对象来替代。通过公有继承,派生类得到了基类中除构造函数、析构函数之外的所有 1>派生类的对象可以赋值给基类对象。
2>派生类的对象可以初始化基类的引用。
3>派生类对象的地址可以赋给指向基类的指针。
在替代之后,派生类对象就可以作为基类的对象使用,但只能使用从基类继承的成员。
1 #include "stdafx.h" 2 #include <iostream> 3 using namespace std; 4 5 class birds //基类 6 { 7 public: 8 void Speaking() 9 { 10 cout << "......" << endl; 11 } 12 }; 13 14 class owl : public birds //子类 15 { 16 public: 17 void Speaking() 18 { 19 cout << "HOOT! HOOT! " << endl; 20 } 21 }; 22 23 24 int main() 25 { 26 birds b0; 27 owl b1; 28 owl b2; 29 30 b0 = b2; //子类的对象可以赋给基类的对象 31 b0.Speaking(); 32 33 birds &br = b1; //子类的对象可以初始化基类的引用 34 br.Speaking(); 35 36 birds *pt = &b1; //子类的对象的地址可以赋给指向基类的指针 37 pt->Speaking(); 38 39 return 0; 40 } 输出结果:
由运行结果可知,当派生类的对象当成基类的对象使用时,调用的都是基类的成员函数和数据成员;
当birds中的Speaking用virtual修饰时,输出结果会是怎样的呢?
1 #include "stdafx.h" 2 #include <iostream> 3 using namespace std; 4 5 class birds //基类 6 { 7 public: 8 virtual void Speaking() 9 { 10 cout << "......" << endl; 11 } 12 }; 13 14 class owl : public birds //子类 15 { 16 public: 17 virtual void Speaking() 18 { 19 cout << "HOOT! HOOT! " << endl; 20 } 21 }; 22 23 24 int main() 25 { 26 birds b0; 27 owl b1; 28 29 b0 = b1; //子类的对象可以赋给基类的对象 30 b0.Speaking(); 31 32 birds &br = b1; //子类的对象可以初始化基类的引用 33 br.Speaking(); 34 35 birds *pt = &b1; //子类的对象的地址可以赋给指向基类的指针 36 pt->Speaking(); 37 38 return 0; 39 }
输出结果:
注意:
复制兼容规则不适用于基类对象,只适用基类引用和指针。
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论