#include <iostream>
using std::cout;
using std::endl;
class Base
{
public :
void f();
void g();
int mBaseData1;
};
class Derived : public Base
{
public :
int mDerivedData1;
};
void main()
{
Base* base = new Base();
Derived* derived = (Derived*)(base); // DownCast
derived->mDerivedData1 = 6;
cout<< derived->mDerivedData1<<endl; // Result = 6;
}
Run Code Online (Sandbox Code Playgroud)
在此代码中 new base()分配堆中的内存
并将Derived* derived = (Derived*)(base)基数转换为派生的
我们如何使用mDerivedData1?我无法找到为mDerivedData1分配内存的位置,或者当我们调用Derived的构造函数来分配mDerivedData1时?
你无法找到mDerivedData1分配内存的原因是因为没有分配内存.您执行了无效的类型转换.存储的东西base是指向Base实例的指针.使用类型转换来告诉编译器它实际上是指向Derived实例的指针并不是这样(但编译器会相信你,因为你是负责人).对象仍然只是一个Base.如果你想要一个Derived,那么你需要实例化一个Derived.您可以使用dynamic_cast将Base指针转换为Derived指针.
Base* base = new Derived;
Derived* derived = dynamic_cast<Derived*>(base);
derived->mDerivedData1 = 6;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2207 次 |
| 最近记录: |