私は抽象クラス 例から派生したクラスに問題があります。抽象クラスからクラスコンストラクタを派生
#include <iostream>
using namespace std;
class A
{
protected:
int a,b;
public:
A(): a(0), b(0) {}
A(int na,int nb): a(na), b(nb) {}
virtual void print() = 0; // Reason to be an abstract class
};
class B : public A
{
public:
B(int a, int b) {A(a,b);}
void print()
{
cout << a << endl;
cout << b << endl;
}
};
int main(){
B clase(3,2);
clase.print();
return 0;
}
上記のコードは次のように私にエラーを与える:
lab1.cpp: In constructor ‘B::B(int, int)’:
lab1.cpp:20:10: error: invalid cast to abstract class type ‘A’
A(a,b);
^
lab1.cpp:5:7: note: because the following virtual functions are pure within ‘A’:
class A
^
lab1.cpp:12:16: note: virtual void A::print()
virtual void print() = 0;
^
注意を:私はそれを動作させる方法を知っている、Bのコンストラクタはこのようになります:
B(int a, int b): A(a,b) {}
しかし、私の本当の疑問は、私の派生クラスのコンストラクタを(上記のコードのような)枝の中で呼びたいのですが? 分岐内で抽象コンストラクタを呼び出す正しい方法は何ですか?
実際にオブジェクトを構築せずに請負業者に電話したいのですか?どうして ? ...そしてもっと重要な理由は何ですか? – HazemGomaa
'A(a、b)'は 'A'を構築することを意味します。これは抽象的なので失敗します。 – songyuanyao
"分岐内の派生クラスのコンストラクタを呼び出す場合はどうすればいいですか" BのコンストラクタでBのコンストラクタを呼び出すことを意味しましたか? – songyuanyao