您發佈的代碼不正確,有點混淆。
A*pa=new B();
int*pi=pa->bar();
那不可能! A中沒有bar()函數,只是在B中。儘管創建了B對象,但是將它投射到A(實際上是你的缺失)。
林不知道你想要做什麼,但我認爲它會類似於一個接口。一個接口以這種方式工作: 您有一個抽象基類,它定義了一組(純)虛函數,並描述了一組固定的功能,如「loadData,saveData」等,但不包括如何實現此功能。您可以將數據實際上保存到一個XML文件,或者就像飛機二進制等(請注意:一個將使用流爲但對我來說我用這個作爲一個例子)
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.
}
注: 對不起,未完成的帖子我無意中碰到按鈕
我在想'class A'虛擬析構函數在哪裏? – sharptooth
這是不可能回答的。你想做什麼? –
我建議找一本好的C++書,並從那裏開始。你顯然不理解*繼承*的概念! – Nim