为什么基类的对象不能给派生类的对象赋值
时间: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);
}
#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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28