• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c++公有继承的赋值兼容规则

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
   赋值兼容规则是指在需要基类对象的任何地方都可以使用公有派生类的对象来替代。通过公有继承,派生类得到了基类中除构造函数、析构函数之外的所有
成员,而且所有成员的访问控制属性也和基类完全相同。这样,公有派生类实际就具备了基类的所有功能,凡是基类能解决的问题,公有派生类都可以解决。赋
值兼容规则中所指的替代包括以下的情况:
    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 }

 

输出结果:

 

 注意:
 复制兼容规则不适用于基类对象,只适用基类引用和指针。

 

 
                    
            
                

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap