c ++中的向下转换问题

may*_*sam 0 c++

#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时?

Rob*_*edy 8

你无法找到mDerivedData1分配内存的原因是因为没有分配内存.您执行了无效的类型转换.存储的东西base是指向Base实例的指针.使用类型转换来告诉编译器它实际上是指向Derived实例的指针并不是这样(但编译器会相信你,因为你是负责人).对象仍然只是一个Base.如果你想要一个Derived,那么你需要实例化一个Derived.您可以使用dynamic_castBase指针转换为Derived指针.

Base* base = new Derived;
Derived* derived = dynamic_cast<Derived*>(base);
derived->mDerivedData1 = 6;
Run Code Online (Sandbox Code Playgroud)