类的转换
在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下调试通过,但理论依据是什么呢?随便哪两种类都可以互相强制转换吗?
我没想清楚,还请各位帮我理解一下,谢谢。
问题点数:50、回复次数:3Top
1 楼kxy(手举穿肠毒药,怀抱刮骨钢刀)回复于 2000-01-13 22:34:00 得分 40
c++中一个类的不同实例实际就是一片内存,同一个类的不同实例成员函数
相同内存,数据不同内存.
你的写法,a,b,c是指针,指针的值是一个32位整数,自然可以指向任何地方.
你的代码中,b 指向了 c 可以的,(Free可能有问题).
你还可以这样写
int *mm;
mm = (int*)c;
b := (cd*)mm;
void *mm;
mm = (void*)c;
b = (cb*)mm;
Top
2 楼Nico()回复于 2000-01-13 23:56:00 得分 10
这正是c++指针的危险之处,小心你的程序编译运行之后一堆Access Violation.Top
3 楼gun2()回复于 2000-03-05 05:38:00 得分 0
我实在是受不了啦!
c++的语法是允许直接将派生类指针赋给基指针变量,但反之则须强制类型转换。他们对于出错的提醒是有必要留心的!如果说理论根据,我只能回答,这就是c++的语法。Top




