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) 没有相同的签名,因此第二个不会为第一个提供实现。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 回答