C++ 将变量作为基类对象进行迭代,同时强制转换到子类,并在C++;
我正在尝试做一些我觉得应该更直接的事情,或者我的Java知识会干扰我,但我无法理解 我只想做一个C++ 将变量作为基类对象进行迭代,同时强制转换到子类,并在C++;,c++,inheritance,polymorphism,C++,Inheritance,Polymorphism,我正在尝试做一些我觉得应该更直接的事情,或者我的Java知识会干扰我,但我无法理解 我只想做一个向量{aa,bb,cc},其中bb和cc是基类a的子实例。每个子类使用相同的函数名,但有不同的实现。所以我想做的是在迭代过程中调用该实现 这是我的尝试 #include <iostream> #include <vector> class A { public: virtual ~A() = default; }; class B: public A {
向量{aa,bb,cc}
,其中bb
和cc
是基类a
的子实例。每个子类使用相同的函数名,但有不同的实现。所以我想做的是在迭代过程中调用该实现
这是我的尝试
#include <iostream>
#include <vector>
class A {
public:
virtual ~A() = default;
};
class B: public A {
public:
int h() {
return 2;
}
};
class C: public A {
public:
int h() {
return 3;
}
};
int main() {
std::cout << "hello world" << std::endl;
// Inheritance
A aa;
B bb;
C cc;
std::vector<A> as {aa, bb, cc};
for (A child: as) {
if (typeid(B) == typeid(child)) {
std::cout << "child is a B" << std::endl;
B* child_b_p= static_cast<B*>(&child);
std::cout << child_b_p -> h() << std::endl;
}
if (typeid(C) == typeid(child)) {
std::cout << "child is a C" << std::endl;
C* child_c_p= static_cast<C*>(&child);
std::cout << child_c_p -> h() << std::endl;
}
}
return 0;
}
我只看到你好世界
。在这种情况下,对象切片的可能解决方法是什么?您正遭受着这样的痛苦。多态性仅在使用指向对象的指针/引用时有效,而您不是
此外,该代码:
if(typeid(B)=typeid(child)){
...
B*child\u B\u p=静态演员阵容(&child);
...
}
应编写为使用dynamic\u cast
而不是typeid()
请尝试以下方法:
#包括
#包括
甲级{
公众:
virtual~A()=默认值;
};
B类:公共A{
公众:
int h(){
返回2;
}
};
C类:公共A类{
公众:
int h(){
返回3;
}
};
int main(){
标准::cout
child is a B
2
child is a C
3