Fro*_*koy 5 c++ polymorphism inheritance constructor abstract-class
我想创建一个名为"Node"的空基类,然后从其中派生出其他类,如"DecisionNode"和"Leaf".这样做是有意义的,这样我就可以利用多态将这些不同类型的节点传递给方法,而不必在编译时知道将传递给方法的内容,但每个派生类不共享任何状态或方法.
我认为实现这个的最好方法是,不在基类中创建额外的纯虚方法,这会增加混乱,这将使构造函数变为纯虚拟.在该类的头文件中,"Node.h"因此我写道:
class Node {
private:
virtual Node();
};
Run Code Online (Sandbox Code Playgroud)
在"Node.cpp"我写道:
#include "Node.h"
virtual Node::Node() = 0;
Run Code Online (Sandbox Code Playgroud)
此实现防止Node被另一个类实例化,因为唯一的构造函数是private,并使用纯虚拟说明符来指示该类是抽象的.但是,这会给编译器错误:
Node.h:6:21: error: return type specification for constructor invalid
Node.h:6:21: error: constructors cannot be declared virtual [-fpermissive]
Run Code Online (Sandbox Code Playgroud)
我的问题是:有一个简洁的方法来创建一个空的抽象基类?
你不能使构造函数虚拟化.如果不需要其他纯虚函数,则可以使析构函数为纯虚拟:
class Node
{
public:
virtual ~Node() = 0;
};
Node::~Node()
{
// Compulsory virtual destructor definition,
// even if it's empty
}
Run Code Online (Sandbox Code Playgroud)
C++不支持虚拟构造函数.
§12.1构造函数
12.1.4构造函数不应为虚拟(10.3)或静态(9.4).
下面的代码不会编译:
virtual Node::Node() = 0;
Run Code Online (Sandbox Code Playgroud)
我的问题是:有一个简洁的方法来创建一个空的抽象基类?
是的,使析构函数成为纯虚函数,还提供析构函数定义
class Node
{
public:
virtual ~Node()=0
{
}
};
Run Code Online (Sandbox Code Playgroud)