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


     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;
    父子之间的赋值兼容问题:
    当使用父类指针(引用)指向子类对象的时候
    ①子类对象退化为父类对象
    ②只能访问父类中定义的成员
    ③可以直接访问被子类覆盖的同名成员
  • 相关阅读:
    09.MyBatis的逆向工程
    08.MyBatis整合Log4j
    07.MyBatis中的关联查询
    06.动态SQL和foreach
    05.MyBtais两种取值符号以及输入参数和输出参数
    04.MyBatis别名的设置和类型转换器
    03.Mybatis优化
    02.Mybatis的动态代理方式实现增删改查
    01.MyBatis入门
    网络安全之网络安全(数通安全)0
  • 原文地址:https://www.cnblogs.com/DXGG-Bond/p/11954216.html
Copyright © 2020-2023  润新知