C++中基类指针指向派生类的问题

来源:百度知道 编辑:UC知道 时间:2024/06/10 19:55:55
完全是按教材上讲的编的。
#include<iostream.h>
class CB
{
int b;
public:
CB(){b=2;};
void showB(){cout<<endl<<b;};
};
class CD:public CB
{
int d;
public:
CD(){d=4;};
void showD(){cout<<endl<<d;};
};

void main()
{
CB bobj,*pb;
CD dobj;
pb=&dobj;
pb->showB();
(CD *)pb=&dobj;
pb->showD();
}

教材上说,欲令基类指针pb可以引用派生类的函数showD(),需要强制改变pb的类型 (CD *)pb=&dobj;
可是运行时候出错error C2106: '=' : left operand must be l-value
为什么啊?
再一个问题,如果按书上说的可以这样强制类型转换的话,那么
int *p;
float a=3.14;
(float *)p=&a;
这样也应该可以喽?

教材上说的没错,但你写错了!
(CD *)pb=&dobj; 这句多余,删除掉。

pb->showD();改成
((CD*)pb)->showD(); 或 CD *pd = (CD*)pb; pd->showD();

再说一个问题, 你对类型转换还搞不太清楚,C/C++中的类型转换很灵活的,原则上是大的往小的转才不会越界。