可以将基类转化为派生类吗?

mengxihe 2003-03-26 02:35:07
class base
{
public:
int count;
};

class CBase : public base
{
public:
int info;
};

class CCC
{
public:
base ba;
};

class CCCC : public CCC
{
public:
CCCC()
{
p = (CBase *) &ba; ///这样可以吗?
p->info = 56;
}
int getinfo()
{
return p->info;
}
public:
CBase * p;
};
...全文
102 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lsquirrel 2003-04-01
  • 打赏
  • 举报
回复
我用DEV C++4.960试了一下,无法编译通过
cansanta 2003-03-29
  • 打赏
  • 举报
回复
编译肯定不能通过。
p = (CBase *) &ba; P是子类的指针指向父类的对象。没问题,编译可以通过。
p->info = 56; 但ba里面没有info这个数据成员。 错误。 编译不能通过
woxihuanbohe 2003-03-28
  • 打赏
  • 举报
回复
不行的啊,因为会产生割据现象,从基类派生出来的子类会比较大啊!
但是基类的指针可以指向子类对象!
zhangx105504 2003-03-28
  • 打赏
  • 举报
回复
已经转换到base, 就不能访问base的成员了
mengxihe 2003-03-27
  • 打赏
  • 举报
回复
看来这样做不行了
quickball 2003-03-27
  • 打赏
  • 举报
回复
可以,但是有潜在的危险
xbdj 2003-03-27
  • 打赏
  • 举报
回复
不能实现,没有为info分配内存,同时,dynamic_cast 不能转换非多态类型类
bauhaus 2003-03-26
  • 打赏
  • 举报
回复
支持用dynamic_cast这样的c++类型转换,当然前提是基类的指针确实指向派生类对象,如果不是转型失败。
winnest 2003-03-26
  • 打赏
  • 举报
回复
如果本身不是派生类,你还非要强制换型,会造成无法预料的后果。
gfh21cn 2003-03-26
  • 打赏
  • 举报
回复
编译可以通过
但是会产生访问地址的错误
rtdb 2003-03-26
  • 打赏
  • 举报
回复
内存非法访问时,结果未定义。
就是说任何情况都有可能发生。
若是不重要的数据,错误可能表现不出来,
若是重要的数据,后果就严重了。
vyc 2003-03-26
  • 打赏
  • 举报
回复
基类到派生类的强制转换用dynamic_cast<>。如果针对指针的转换,失败会返回0;如果针对引用的转换,失败会抛出bad_cast异常.
mengxihe 2003-03-26
  • 打赏
  • 举报
回复
可我的getinfo()返回值却是正确的?
rtdb 2003-03-26
  • 打赏
  • 举报
回复
在这里强制转换是错误的,
当你
p->info = 56;
就会内存越界非法访问了。
gfh21cn 2003-03-26
  • 打赏
  • 举报
回复
强制转换是可以的
但是,我估计这样没有意义了

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧