传统和过载功能

heritage and overloaded function

本文关键字:功能 传统      更新时间:2023-10-16

与其进行冗长的解释,我认为几行代码会更清楚地解释我的问题。假设我有 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 中的治疗线"。是否可以使类 B 中的函数 treatLine 被称为 B 类型的对象(即"B 中的 treatLine "将打印用于上面的代码)?并保留创建类型A的对象的可能性,该对象将打印"A中的治疗线"

使treatLine虚拟:

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

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

在 A 虚拟中使 treatLine 函数