+ -
当前位置:首页 → 问答吧 → 为什么基类的对象不能给派生类的对象赋值

为什么基类的对象不能给派生类的对象赋值

时间:2011-12-17

来源:互联网

针对这个程序,为什么基类的对象不能非派生类的对象赋值
#include<iostream>
using namespace std;
class B0{
public:
void display()
{cout<<"B0::display()"<<endl;getchar();}
};
class D0:public B0{
public:
void display()
{cout<<"D0::display()"<<endl;getchar();} 
};
class D1:public D0{
public:
void display()
{cout<<"D1::display()"<<endl;getchar();}
};
void fun(B0 *p)
{
  p->display();  
}
int main()
{
  B0 b0;
D0 d0;
D1 d1;
d0 *ptr;
ptr=&d0;
fun(ptr);
ptr=&b0;
fun(ptr);
ptr=&d1;
fun(ptr);  
}

作者: Y_Ytou   发布时间: 2011-12-17

C/C++ code
#include<iostream>
using namespace std;
class B0{
public:
    void display()
    {cout<<"B0::display()"<<endl;getchar();} 
};
class D0:public B0{
public:
    void display()
    {cout<<"D0::display()"<<endl;getchar();}  
};
class D1:public D0{
public:
    void display()
    {cout<<"D1::display()"<<endl;getchar();} 
};
void fun(B0 *p)
{
    p->display();   
}
int main()
{
    B0 b0;
    D0 d0;
    D1 d1;
    D0 *ptr;
    ptr=&d0;
    fun(ptr);
    ptr=(D0*)&b0;
    fun(ptr);
    ptr=&d1;
    fun(ptr);   
}

要加上类型转换

作者: riyueming184   发布时间: 2011-12-17

因为从逻辑上讲,子类的对象是一个父类的对象,而父类的对象就不一定是子类的对象。
比如说,类“鸟”是类“麻雀”的父类,那么一只麻雀是一只鸟,而一只鸟并不一定是一只麻雀。

作者: milkylove   发布时间: 2011-12-17

1楼那样强制转换的情型是非常危险的。因为父类可能并没有定义子类的一些属性和方法,强行引用可能会引发未知的后果。

作者: milkylove   发布时间: 2011-12-17