我有一个带有纯虚函数f()的抽象类,我想创建一个从该类继承的类,并且还重写函数f()。我分隔了头文件和cpp文件。 我在头文件中声明了函数f(int),定义在cpp文件中。但是,编译器说派生类仍然是抽象的。 我该如何解决?
答案 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
}
希望这有帮助!