C++ 铸造基类问题

C++ 铸造基类问题,c++,C++,请拿它为例,我知道它不好,但我写得再好不过了 我想更好地了解为什么演员阵容不能正常工作?而且它被认为是错误的强制转换。代码没有任何错误,只是强制转换实际上是不必要的。如果没有它,代码可以编译并正常工作。代码没有问题,只是强制转换实际上是不必要的。如果没有它,代码可以编译并正常工作。这里不需要(C风格或其他)强制转换。您的main()函数(应始终返回int)应如下所示: class YourInterface { public: YourInterface(){ } vi

请拿它为例,我知道它不好,但我写得再好不过了


我想更好地了解为什么演员阵容不能正常工作?而且它被认为是错误的强制转换。

代码没有任何错误,只是强制转换实际上是不必要的。如果没有它,代码可以编译并正常工作。

代码没有问题,只是强制转换实际上是不必要的。如果没有它,代码可以编译并正常工作。

这里不需要(C风格或其他)强制转换。您的
main()
函数(应始终返回
int
)应如下所示:

class YourInterface {
public:
    YourInterface(){
    }

    virtual ~YourInterface(){
    }

    virtual void saveData(Data data) = 0; //Pure virtual = Childs are forced to implement those functions to become non abstract
    virtual Data loadData() = 0;
};

//One implementation to load and save data to/from a xml file
class XmlImplementation : public YourInterface {
public:
    XmlImplementation(){
    }

    virtual ~XmlImplementation(){
    }

    //Overriding functions:
    void saveData(Data data){
        //Save data to a xml file here
    }

    Data loadData(){
        //Load data from a xml file here
    }
};

void main(){
    YourInterface* p;
    p = (YourInterface*) new XmlImplementation();

    p->loadData(); //We just want to get our Data here, we dont care whether its from a xml or binary file etc.
}
如果你犯了错误,那不是因为演员阵容

<> > No.b.<强>:在C++中,习惯上从从派生类的指针到基类指针的类型化时使用。

< P>不需要(C样式或其他类型)在此进行转换。您的
main()
函数(应始终返回
int
)应如下所示:

class YourInterface {
public:
    YourInterface(){
    }

    virtual ~YourInterface(){
    }

    virtual void saveData(Data data) = 0; //Pure virtual = Childs are forced to implement those functions to become non abstract
    virtual Data loadData() = 0;
};

//One implementation to load and save data to/from a xml file
class XmlImplementation : public YourInterface {
public:
    XmlImplementation(){
    }

    virtual ~XmlImplementation(){
    }

    //Overriding functions:
    void saveData(Data data){
        //Save data to a xml file here
    }

    Data loadData(){
        //Load data from a xml file here
    }
};

void main(){
    YourInterface* p;
    p = (YourInterface*) new XmlImplementation();

    p->loadData(); //We just want to get our Data here, we dont care whether its from a xml or binary file etc.
}
如果你犯了错误,那不是因为演员阵容


< > > No.b.<强>:在C++中,习惯上从指针到派生类的类型转换为基类指针。< /P>您得到什么错误消息?在我的编译器中,它似乎没有错误地工作得更好。谢谢“拒绝正常工作”是什么意思?您使用的是C++中提供的最强大的函数:通过虚拟函数运行时多态性。怎么了?谢谢,我现在意识到我的误解了,我很久以前就学会了虚拟函数的多态性,我也知道它们,但肯定没有你知道的那么多。您收到了什么错误消息?在我的编译器上,它似乎工作得更好,没有错误。谢谢“拒绝正常工作”是什么意思?您使用的是C++中提供的最强大的函数:通过虚拟函数运行时多态性。怎么了?谢谢,我现在意识到我的误解了,我很久以前就学会了虚拟函数的多态性,我也知道它们,但肯定没有你知道的那么多。谢谢你的想法,非常有见地。谢谢你的想法,非常有见地。不,
static\u cast
是在对基类进行强制转换时使用的方法,因为它总是安全且定义良好的<代码>动态_cast用于向另一个方向移动。@马克:噢!我真的应该回去睡觉了。谢谢谢谢:-),我正在吃早餐,有一些游客在我身后看着我什么也发不出来。我现在已经刷牙了,这么多澳大利亚人顺便说一句:D.说真的,你真是太好了,谢谢你了。@Mark,
static\u cast
可以用于转到派生类,特别是当RTTI由于某种原因不可用时。当转换到基类时,不需要强制转换。不,
static\u cast
是转换到基类时要使用的,因为它总是安全且定义良好的<代码>动态_cast用于向另一个方向移动。@马克:噢!我真的应该回去睡觉了。谢谢谢谢:-),我正在吃早餐,有一些游客在我身后看着我什么也发不出来。我现在已经刷牙了,这么多澳大利亚人顺便说一句:D.说真的,你真是太好了,谢谢你了。@Mark,
static\u cast
可以用于转到派生类,特别是当RTTI由于某种原因不可用时。当转到基类时,不需要强制转换。