投稿したコードが間違っていて、混乱しています。
A*pa=new B();
int*pi=pa->bar();
それはできません! Bにはbar()関数はありませんが、Bオブジェクトを作成するとAにキャストします(実際には欠けています)。
あなたは正確にやりたいことはわかりませんが、私はそれがインターフェイスに似たものになると思います。 あなたは(純粋な)仮想関数のセットを定義する抽象基本クラスを持ち、 "loadData、saveData"などの固定機能セットを記述しますが、この機能の実装方法は記述しません。 NOTE
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.
}
:用 申し訳ありません:あなたは(一つは、そのためのストリームを使用しますが、私の場合を例としてこれを使用しますのでご注意ください)など、実際にXMLファイルにデータを保存するか、単にプレーンバイナリとしてすることができます未完成の投稿私は誤ってボタンを押す
「クラスA」仮想デストラクタはどこですか? – sharptooth
答えることは不可能です。あなたは何をしようとしているのですか? –
私は良いC + +の本を取得し、そこから開始することをお勧めします。あなたは明らかに*継承*の概念を理解していません! – Nim