2

純粋仮想関数f()を持つ抽象クラスがあり、そのクラスから継承されたクラスを作成し、関数f()をオーバーライドしたいと思います。ヘッダーファイルとcppファイルを分離しました。ヘッダーファイルで関数f(int)を宣言し、定義はcppファイルにあります。ただし、コンパイラは、派生クラスはまだ抽象的であると言います。どうすれば修正できますか?

4

3 に答える 3

1

基本クラスでf(int)を純粋な仮想またはf()として宣言していますか?

純粋仮想関数は、基本クラス内に定義を持つことができます。純粋仮想関数は、派生型が関数f(int)の独自の実装も指定する必要があることを単に示しています。

class Base
{
public:
  virtual void f(int) = 0;
}


Base::f(int)
{
//some code 
}


class Derived : public Base
{
public:
  virtual void f(int)
  {//Implementation is needed in Derived since f(int) is pure virtual
  }
}
于 2010-03-27T20:41:33.137 に答える
1

関数f()とf(int)は同じシグネチャを持たないため、2番目の関数は最初の関数の実装を提供しません。PVFと実装の署名は正確に一致する必要があります。

于 2010-03-27T20:42:42.653 に答える
0

C ++テンプレートの使用はどうですか?

template<typename T>
 class Basic{
  public:
   void f(T);
};

template<typename T>
 Basic<T>::f(T t){
   //Do something generic here
 }

パラメータが特定のタイプであるときに関数fが何か他のことをする必要がある場合は、テンプレートの特殊化を使用できます。この例では文字列を使用します。

template<>
 class Basic<string>{
  public:
   void f(string);
};

template<>
 Basic<string>::f(string t){
   //Do your special thing with a string
}

お役に立てれば!

于 2010-04-03T10:55:15.070 に答える