遗产和超载功能

时间:2012-09-24 00:30:59

标签: c++ oop

我认为有几行代码可以更清楚地解释我的问题,而不是长篇解释。假设我有两个类,一个继承自另一个类:

#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类对象的可能性,该对象将打印“TreatLine in A”

2 个答案:

答案 0 :(得分:1)

treatLine虚拟:

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

这样,将根据对象的 runtime 类型调用该函数(称为“动态类型”),而不是 compiletime 类型(称为对象的“静态类型”。

答案 1 :(得分:0)

在虚拟

中创建treatLine功能