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

C++中继承的函数作用于基类还是派生类元素?附代码示例咨询

C++继承中成员函数访问的成员变量问题

嘿,我来帮你理清这个C++继承的问题~首先你的代码里有几个语法小错误,我先帮你修正成可编译的版本,再一步步解答你的问题:

#include <iostream>
using namespace std;

class base {
    int hello;
public:
    base() { hello = 5; }  // 修正:构造函数需要加括号
    void show() { cout << hello; }
};

class derived : public base {  // 修正:继承的是base类,不是hello变量
    int hello;
public:
    derived() { hello = 2; }
    void show();  // 修正:成员函数声明需要指定返回类型
};

// 实现派生类的show函数
void derived::show() {
    cout << hello;
}

一、调用show()会输出什么?

如果你创建派生类对象并调用show(),比如:

int main() {
    derived d;
    d.show();
    return 0;
}

默认会输出 2。

二、原因是什么?

这里核心是C++的**名称隐藏(Name Hiding)**规则:当派生类定义了和基类同名的成员变量(这里两个类都有int hello),派生类的成员会“隐藏”基类的同名成员。

在派生类的show()函数里,你直接写hello时,编译器会优先查找当前类(derived)的成员,所以会访问派生类里赋值为2的hello,自然输出2。

补充一句:如果派生类没有重写show(),调用d.show()会触发基类的show(),这时候基类的函数只会访问自己的hello,输出5——但你的代码里派生类声明了show(),所以会调用派生类的版本(前提是你实现了它,不然会报链接错误)。

三、如何让它输出另一个值?

分两种场景来说:

场景1:现在输出2,想改成输出5(基类的hello值)

有两种简单方法:

  • 方法一:在派生类show()里显式指定访问基类成员
    修改派生类的show()实现:
void derived::show() {
    cout << base::hello;  // 用base::限定符强制访问基类的hello
}

这样调用d.show()就会输出5。

  • 方法二:删除派生类的show()声明
    把派生类里的void show();删掉,这样调用d.show()时,会自动调用基类的show(),基类函数访问自己的hello,输出5。

场景2:如果当前输出5(比如没重写show()),想改成输出2

那就在派生类中重写show()函数,直接访问派生类自己的hello,就像最开始修正后的代码那样,调用后就会输出2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:11:17