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

Posted dxgg-bond

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了父类指针可以直接指向子类对象,父类引用可以直接引用子类对象相关的知识,希望对你有一定的参考价值。

 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;
父子之间的赋值兼容问题:
当使用父类指针(引用)指向子类对象的时候
①子类对象退化为父类对象
②只能访问父类中定义的成员
③可以直接访问被子类覆盖的同名成员

以上是关于父类指针可以直接指向子类对象,父类引用可以直接引用子类对象的主要内容,如果未能解决你的问题,请参考以下文章

C++--同名覆盖多态

第48课 同名覆盖引发的问题

用父类引用指向子类好处

第48课 同名覆盖引发的问题------子类中函数重写遇上赋值兼容

JAVA面向对象04

JAVA中如何对父类对象强制转换子类对象的引用