zoukankan      html  css  js  c++  java
  • 父类指针可以直接指向子类对象,父类引用可以直接引用子类对象

     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;
    父子之间的赋值兼容问题:
    当使用父类指针(引用)指向子类对象的时候
    ①子类对象退化为父类对象
    ②只能访问父类中定义的成员
    ③可以直接访问被子类覆盖的同名成员
  • 相关阅读:
    PL/SQL 训练05--游标
    PL/SQL 训练04--事务
    PL/SQL 训练03 --异常
    PL/SQL 训练02--集合数组
    PL/SQL 训练01--基础介绍
    25 mysql怎么保证高可用
    pt工具之pt-archiver
    Oracle日常性能问题查看
    Oracle的cursor
    Oracle 索引扫描的几种情况
  • 原文地址:https://www.cnblogs.com/DXGG-Bond/p/11954216.html
Copyright © 2011-2022 走看看