抛出基类问题

时间:2011-08-18 02:09:15

标签: c++

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.
}

请以此为例,我知道这不好,但我写不出更好。

我想更好地了解为什么主要演员拒绝正常工作?并且它被认为是一个错误的演员。

2 个答案:

答案 0 :(得分:3)

代码没有错,只是演员实际上是不必要的。如果没有它,代码将编译并正常工作。

答案 1 :(得分:2)

此处不需要(C风格或其他方式)演员。您的main()函数(应始终返回int)应如下所示:

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

    p->loadData();
}

如果你收到错误,那不是因为演员。

N.B :在C ++中,当从指向派生类的指针到指向基类的指针进行类型转换时,习惯使用static_cast