您的位置:首页 > 编程语言 > C语言/C++

C++中子类和父类之间的相互转化

2012-06-27 21:33 281 查看


C++父类和子类对象指针之间的转换

C++父类和子类对象指针之间的转换,有示例代码

C++父类和子类对象指针之间的转换

由子类向父类转换很简单, 用默认转换.

例如 CWnd* pWnd = (CWnd*)(&ChildView);
由父类向子类, 用dynamic_cast. 使用dynamic_cast是有限制的.

例如对如下语句:

CPoint3D* p1 = dynamic_cast(p);

1.p虽然是CPoint类型, 但是p应当实际指向一个CPoint3D对象. 如果p实际指向的不是一个CPoint3D对象,则转换后的返回值为NULL.

2.VC中必须在project setting中设定/GR选项, 即Enable Runtime Type Identification(RTTI).

下面是一段示例代码:

#include <iostream>

using namespace std;

class CPoint

{

public:

virtual void f(){cout << "CPoint::f" <<endl;}

};

class CPoint3D : public CPoint

{

public:

virtual void f(){cout << "CPoint3D::f" <<endl;}

};

int main()

{

CPoint point,*pPoint;

CPoint3D point3D,*pPoint3D;

//子类向父类类型转换,直接强制转换就可以了,但实际仍然指向子类对象

pPoint = (CPoint*)&point3D;

pPoint->f(); //调用的仍然是子类的函数,这便是虚函数的魅力所在

//父类向子类类型转换,要用dynamic_cast

pPoint3D = dynamic_cast(pPoint);

pPoint->f(); //pPoint实际指向一个CPoint3D对象,故可以正确转换

pPoint3D = dynamic_cast(&point);

cout << (int*)pPoint3D << endl; //&point指向的不是一个CPoint3D对象,返回值为NULL

return 0;

}

运行结果为:

CPoint3D::f

CPoint3D::f

00000000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: