摘要 类,多态性 C++ - 在另一个函数中调用纯虚方法
Abstract Classes, Polymorphism C++ - Calling pure virtual method in another function
我有一个抽象基 class 定义如下:
class NodeSubElementEnforceType {
public:
virtual void getType() = 0;
void performChecks() {
getType();
// other things ......
}
};
我将有一堆派生的 classes,每个都有自己的 getType()
方法实现,例如:
class BNode : public NodeSubElementEnforceType {
public:
void getType() {
// ..... BNode implementation ....
}
}
class CNode : public NodeSubElementEnforceType {
public:
void getType() {
// ..... CNode implementation ....
}
}
我会将派生的 class 对象存储在某种容器中,如下所示:
std::vector<NodeSubElementEnforceType*> allNodes;
NodeSubElementEnforceType* node1 = new BNode();
NodeSubElementEnforceType* node2 = new CNode();
allNodes.emplace_back(node1);
allNodes.emplace_back(node2);
现在,我只想遍历向量中的所有对象并调用每个对象的 performChecks()
方法:
for (unsigned i = 0; i < allNodes.size(); i++) {
allNodes.at(i)->performChecks();
}
我的问题是,这会像我希望的那样工作吗?
我希望 performChecks()
在运行时调用正确派生的 class 的 getType()
方法(BNode
或 CNode
)。我在基础 class 中实现了 performChecks()
,因为我不想在所有派生的 class 中实现它,唯一改变的是 getType()
方法取决于在导出的 class.
这样的设计好吗?我应该从另一个具体方法内部调用 virtual
方法吗?
是的,它会起作用。但是将原始指针存储在向量中并不是一个好主意,如果这不是矫枉过正的话,请使用智能指针或 boost 指针容器。
我有一个抽象基 class 定义如下:
class NodeSubElementEnforceType {
public:
virtual void getType() = 0;
void performChecks() {
getType();
// other things ......
}
};
我将有一堆派生的 classes,每个都有自己的 getType()
方法实现,例如:
class BNode : public NodeSubElementEnforceType {
public:
void getType() {
// ..... BNode implementation ....
}
}
class CNode : public NodeSubElementEnforceType {
public:
void getType() {
// ..... CNode implementation ....
}
}
我会将派生的 class 对象存储在某种容器中,如下所示:
std::vector<NodeSubElementEnforceType*> allNodes;
NodeSubElementEnforceType* node1 = new BNode();
NodeSubElementEnforceType* node2 = new CNode();
allNodes.emplace_back(node1);
allNodes.emplace_back(node2);
现在,我只想遍历向量中的所有对象并调用每个对象的 performChecks()
方法:
for (unsigned i = 0; i < allNodes.size(); i++) {
allNodes.at(i)->performChecks();
}
我的问题是,这会像我希望的那样工作吗?
我希望 performChecks()
在运行时调用正确派生的 class 的 getType()
方法(BNode
或 CNode
)。我在基础 class 中实现了 performChecks()
,因为我不想在所有派生的 class 中实现它,唯一改变的是 getType()
方法取决于在导出的 class.
这样的设计好吗?我应该从另一个具体方法内部调用 virtual
方法吗?
是的,它会起作用。但是将原始指针存储在向量中并不是一个好主意,如果这不是矫枉过正的话,请使用智能指针或 boost 指针容器。