【发布时间】:2013-10-28 18:44:58
【问题描述】:
我想创建一个带有纯虚拟私有方法的抽象类,但我无法在我的具体类中实现它。我的选择是使纯虚拟私有方法受到保护,但在我的具体类中,我只想将其设为私有。喜欢,
class IFoo
{
public:
IFoo(){}
virtual ~IFoo(){}
protected:
virtual void fooMethod() = 0;
};
class Foo : public IFoo
{
public:
Foo(){}
virtual ~Foo(){}
private:
virtual void fooMethod() {}
};
这样做有什么暗示吗?还是这样就好了?
谢谢!
【问题讨论】:
-
允许并且有效地覆盖私有虚函数。请参阅this。
-
@HansPassant 怎么样? IFoo 的方法是受保护的,因此不能被客户端调用。
-
@HansPassant:不!因为它是纯的虚拟的所以不能被调用
-
@HansPassant: Wrong again :) 将此转换为
IFoo*并调用会给出错误:virtual void IFoo::fooMethod()受保护。我还在Foo的方法中尝试了IFoo::fooMethod,它给出了链接器错误。 -
@legends2k - 如果您为纯虚函数提供实现,则可以调用它们。唯一真正的要求是子类实现它们。例如,如果你想确保基类永远不会被实例化,你可以给它一个纯虚析构函数。即使你有析构函数的实现,它仍然是一个抽象类。事实上,析构函数必须有一个实现,但它可能是基类中唯一要保持抽象的函数。
标签: c++