这段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
相关产品推荐
相关产品推荐

