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