我认为不用花太多时间解释,而是可以使用几行代码来解释我的问题。可以说我有2个类,一个类继承自另一个类:

#include <iostream>
class A{
    public:
        void parse()
        {
            treatLine();
        };
        void treatLine()
        {
            std::cout << "treatLine in A" << std::endl;
        }
};

class B : public A{
    public:
        void treatLine()
        {
            std::cout << "treatLine in B" << std::endl;
        }
};

int main()
{
    B b;
    b.parse();
    return 0;
}

对我来说,执行时令人惊讶的是,它会打印“A中的TreatLine”。是否可以将类B中的函数TreatLine调用为B类型的对象(即,上面的代码将打印“B中的treatLine”)?并保留创建类型为A的对象的可能性,该对象将打印“A中的TreatLine”

最佳答案

treatLine设为虚拟:

virtual void treatLine() {
    std::cout << "treatLine in A" << std::endl;
}

这样,将根据对象的运行时类型(称为“动态类型”)而不是对象的编译时类型(称为“静态类型”)来调用函数。

关于c++ - 传承和功能重载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12557469/

10-09 13:29