从父方法调用子方法

时间:2017-07-09 21:32:58

标签: c++ inheritance

正如标题所述,我希望能够在以下代码中打印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方式,那么请随意提供一个不涉及继承的替代解决方案。

1 个答案:

答案 0 :(得分:2)

A a = b;  // Upcast

这不符合您的想法 - 它创建了一个全新的A对象,使用A的{​​{1}}子对象初始化。

如果您想将b本身视为b,请使用参考:

A