类型兼容---子类的对象可以给父类指针赋值

Posted 高傲的monkey

tags:

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

一个公有派生类的对象在使用上可以被当做基类的对象,反之禁止。

也就是说:1.派生类的对象可以赋值给基类的对象

如 

B:public A    
A a;
B b;
a = b;//语法上是允许的

2、派生类的对象可以初始化基类的引用:

void f(A &a)
{}

int main()
{
B b;
f(b);
}

3、指向基类的指针可以指向派生类

A *p;
p = new B();

例子:

#include <iostream>
using namespace std;

class B0    //基类B0声明
{ public:
    void display(){cout<<"B0::display()"<<endl;}    //公有成员函数
};
class B1: public B0    
{
 public:
    void display(){cout<<"B1::display()"<<endl;}    
};
class D1: public B1    
{
public:
    void display(){cout<<"D1::display()"<<endl;}    
};
void fun(B0 *ptr)    
{    ptr->display();    //"对象指针->成员名"  
}
int main()    //主函数
{    B0 b0;    //声明B0类对象
    B1 b1;    //声明B1类对象
    D1 d1;    //声明D1类对象
    B0 *p;    //声明B0类指针
    p=&b0;    //B0类指针指向B0类对象
    fun(p);
    p=&b1;    //B0类指针指向B1类对象
    fun(p);
    p=&d1;    //B0类指针指向D1类对象
    fun(p);
}
结果:
B0::display()
B0::display()
B0::display()

注意:尽管是将派生的对象赋值给了基类的指针,但全部调用的基类的函数,因为在子类中的同名函数会被基类同名函数覆盖。

 

以上是关于类型兼容---子类的对象可以给父类指针赋值的主要内容,如果未能解决你的问题,请参考以下文章

C++三大特性---继承

C++继承多态总结

继承与多态C++:继承中的赋值兼容规则,子类的成员函数,虚函数(重写),多态

C++--同名覆盖多态

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

总结C++基类与派生类的赋值兼容规则