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