类的转换

netsky 2000-01-13 10:18:00
在C++中把一个基指针强制为派生指针并存取整个派生类是可以的,但相反呢?
派生类指针可以转换为基类指针吗?没有关联的类可以互相转换吗?
为此作了一个例程:
class ca
{
public:
void testa(){printf("test ca");}
}

class cb
{
public:
void runother(){};
void test(){printf("test cb");}
}

class cc:public ca,cb
{
public:
void test(){printf("test cc");}
}

main()
{
ca *a;
cb *b;
cc *c;

c=new cc;
c->test();
a=(ca*)c;
a->testa();
b=(cb*)a; //俩个没有关系的类指针的互换
b->test();
}
在VC6下调试通过,但理论依据是什么呢?随便哪两种类都可以互相强制转换吗?
我没想清楚,还请各位帮我理解一下,谢谢。
...全文
542 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gun2 2000-03-05
  • 打赏
  • 举报
回复
我实在是受不了啦!

c++的语法是允许直接将派生类指针赋给基指针变量,但反之则须强制类型转换。他们对于出错的提醒是有必要留心的!如果说理论根据,我只能回答,这就是c++的语法。
Nico 2000-01-13
  • 打赏
  • 举报
回复
这正是c++指针的危险之处,小心你的程序编译运行之后一堆Access Violation.
kxy 2000-01-13
  • 打赏
  • 举报
回复
c++中一个类的不同实例实际就是一片内存,同一个类的不同实例成员函数
相同内存,数据不同内存.
你的写法,a,b,c是指针,指针的值是一个32位整数,自然可以指向任何地方.
你的代码中,b 指向了 c 可以的,(Free可能有问题).

你还可以这样写

int *mm;
mm = (int*)c;

b := (cd*)mm;

void *mm;
mm = (void*)c;
b = (cb*)mm;

69,337

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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