从基类调用继承类的方法.C++

Call a method of the inherited class from the base class. C++

本文关键字:方法 C++ 继承 基类 调用      更新时间:2023-10-16

我想要一个函数,它接收一个包含基类元素的向量,并执行相应继承类的方法。我不知道是否应该在基类中定义一个虚拟函数。无论如何,只要我不希望继承的类是抽象的,它就不可能是一个纯粹的虚拟函数。

class A {
public:
void printSubclass() {
std::cout << "No subclass found";
}
};
class B : public A {
public:
void printSubclass() {
std::cout << "Subclass B";
}
};
class C : public A {
public:
void printSubclass() {
std::cout << "Subclass C";
}
};
void function(vector<A> MyVec) {
for(int k=0; k<Myvec.size(); k++)
MyVec[k].printSubclass();
}
int main() {
B ObjB;
C ObjC;
vector<A> MyVector= {ObjB, ObjC}    
function(ObjB);
return 0;
}

您将需要使printSubclassvirtual(是否纯取决于"A"的实际对象是否有意义,而不是取决于与派生类有关的任何事情(。不管printSubclass是否是纯的,向量都需要是A*,而不是直接的A对象。由于向量包含"A"对象,每当你把非A对象放入向量中时,非A部分就会被切片