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
相关文章推荐
- C++中子类和父类之间的相互转化
- C++中子类和父类之间的相互转换
- c++中父类和子类能相互转化问题
- C++中子类和父类之间的相互转换
- C++中ASCII、unicode与Utf8之间的相互转化
- c++父类和子类转化致命的代码错误
- java类继承总结一 父类类型与子类类型之间的转化问题(转)
- C++在父类和子类之间进行转型时脑抽做了个试验
- Java中父类与子类之间的转化
- C++子类 父类的相互转换 和 虚函数
- C++中子类与父类之间的值传递即指针传递
- c++中字符串与数字之间的相互转化
- C++学习基础十一——子类对象向父类对象的转化
- c++父类指针子类指针转化分析
- java类继承总结一 父类类型与子类类型之间的转化问题
- java类继承总结一 父类类型与子类类型之间的转化问题
- 父类子类相互转化的内存关系
- java类继承总结一 父类类型与子类类型之间的转化问题
- C++中ASCII、unicode与Utf8之间的相互转化
- 在 C#,快速复制一个对象的值给另一个对象(常常用于父类与子类之间相互复制)