1
がC++ - 私はクラスを持っている場合は、純粋仮想関数のパラメータ
class Base {
public:
virtual void func() = 0;
};
言う二つの他のクラス
class DerivedA1 : public Base {
public:
virtual bool func(string command);
};
class DerivedB1 : public Base {
public:
virtual void func();
}
class DerivedA2 : public DerivedA1 {
public:
bool func(string command); //This one implements it differently
}; //its base class.
のための基本です許さ以上ですか?私はパラメータなしでfunc()を宣言しましたが、私はそれをパラメータとともに使用しています。これは、それは学校の割り当ての一部ですので、私は私が投稿することはできません私のコードで似たような状況を持っている、と
error: no matching function for call to Base::fucn(std::string&)
note: candidate is: virtual bool Base::move();
note: candidate expects 0 arguments, provided 1
のようなエラーを取得私はFUNC()その異なるで異なる使用したいのです派生クラス。この問題を解決するにはどうすればよいですか?
いいえ、許可されていません。基本クラスの 'virtual'関数のオーバーライドは、まったく同じシグネチャでなければなりません。 –
派生クラスがメソッドの引数を変更することを可能にする* contravariance *というコンセプトがありますが、ここでは該当しません。 *デフォルトの引数*を使用することができます:http://en.cppreference.com/w/cpp/language/default_arguments – mike
このパラメータには別のクラスを作成できます。仮想void func(MyBaseParemeterClass *)= 0; – QuentinUK