You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

这段C++代码中继承机制如何运作?为何输出仅打印橙色语句?

问题解答

你的代码里,Orange类的print函数隐藏了父类Red的同名print函数,所以调用colorOrange.print()时只会执行Orange自己的print实现,不会自动触发父类的版本,自然就不会输出The color is red。

核心原因:非虚函数的隐藏机制

C++里,当子类定义了和父类同名的非虚函数时,子类的函数会直接隐藏父类的同名函数——这不是多态的覆盖,而是名字屏蔽。这时候通过子类对象调用该函数,只会找到子类的版本,父类的同名函数不会被自动执行。

实现你预期输出的方法

如果想让子类print执行时也调用父类的print,必须在子类的函数里显式指定调用父类版本:

class Orange: public Red{
    public: void print(){
        cout<<"The color is orange";
        Red::print(); // 显式调用父类的print
    }
};

修改后再运行,就会输出The color is orangeThe color is red了。

额外提一句虚函数的情况

就算把父类的print定义成虚函数(实现多态覆盖),也不会自动调用父类的函数,依然需要像上面那样显式写Red::print()才能触发父类的逻辑。

内容的提问来源于stack exchange,提问作者ahahahahana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:55:29