从抽象类派生类(C ++)

时间:2010-03-27 20:39:52

标签: c++ abstract-class override pure-virtual

我有一个带有纯虚函数f()的抽象类,我想创建一个从该类继承的类,并且还重写函数f()。我分隔了头文件和cpp文件。 我在头文件中声明了函数f(int),定义在cpp文件中。但是,编译器说派生类仍然是抽象的。 我该如何解决?

3 个答案:

答案 0 :(得分: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
  }
}

答案 1 :(得分:1)

函数f()和f(int)没有相同的签名,因此第二个函数不会为第一个提供实现。 PVF的签名和实现必须完全匹配。

答案 2 :(得分: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
}

希望这有帮助!