父类指针可以直接指向子类对象,父类引用可以直接引用子类对象


 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 class parent{
 5 public:
 6         int mi;
 7         void add(int v){
 8                 mi += v;
 9         }
10         void add(int a,int b){
11                 mi += (a+b);
12         }
13 };
14 class child:public parent{
15 public:
16         int mv;
17         void add(int x,int y,int z){
18                 mv += (x+y+z);
19         }
20 };
21 int main(){
22         parent p;
23         child c;
24         p=c;//子类对象对父类对象赋值
25         parent p1(c);//子类对象对父类对象初始化
26         parent& rp = c;//父类引用可以直接引用子类对象 
27         parent* pp = &c;//父类指针指向子类对象
28 
29         rp.mi = 100;
30        rp.add(5);//并没有发生同名覆盖啊,顺利编译过
31         cout << "rp.mi=" << rp.mi << endl;//105
32         rp.add(10,10);//也没有发生同名覆盖,顺利编译过
33         cout << "rp.mi(10,10)=" << rp.mi << endl;//125
34 
35         //pp->mv = 35;//报错!编译不过!
36         //cout << "pp->mv=" << pp->mv << endl;//35
37         //pp->add(5,5,5);//50
38         return 0;
39 
40 
41 //result:
42 g++ test.cpp 
43 [48 22:03#43]$./a.out
44 rp.mi=105
45 rp.mi(10,10)=125;
父子之间的赋值兼容问题:
当使用父类指针(引用)指向子类对象的时候
①子类对象退化为父类对象
②只能访问父类中定义的成员
③可以直接访问被子类覆盖的同名成员
优质内容筛选与推荐>>
1、海量数据、高并发优化方案
2、response.sendRedirect 传递参数的问题
3、【经验】Angularjs 中使用 layDate 日期控件
4、fgets()函数的详解以及使用时需要注意的一些细节-C语言基础
5、Castle ActiveRecord学习实践(3):映射基础


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号