正如标题所述,我希望能够在以下代码中打印101:
#include <iostream>
#include <sstream>
#include <string>
class A {
public:
virtual int num(); // Method I want to override
std::string str();
};
class B: public A {
public:
int num();
};
int A::num(){
return 0; // default value
}
std::string A::str(){
std::ostringstream s;
s << num();
return s.str();
}
int B::num(){
return 101; // overriden value
}
int main(){
B b;
A a = b; // Upcast
std::cerr << a.str() << std::endl; // Want to print 101, but print 0
return 0;
}
在一般情况下,我有一个父类(A
)的多个子类,它们实现了自己的逻辑来计算某些东西(num()
),而父类在输出上执行相同的东西。 {(1}}的所有不同实现的东西(str()
)。我无法弄清楚如何在c ++中做到这一点。
我来自python背景,我还在学习c ++。通常这可以在python中运行,但如果这不是一个好的设计或不是正确的OOP方式,那么请随意提供一个不涉及继承的替代解决方案。
答案 0 :(得分:2)
A a = b; // Upcast
这不符合您的想法 - 它创建了一个全新的A
对象,使用A
的{{1}}子对象初始化。
如果您想将b
本身视为b
,请使用参考:
A