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

C++继承问题:main.cpp无法调用父类public的getName()函数

问题解决:无法调用父类public函数的原因及修复

核心问题

你遇到的问题根源是C++中类的默认继承方式为private继承。当你写class salesperson : abstractsales时,没有显式指定继承权限,父类abstractsales的所有public成员(包括getName()函数)都会被继承为子类的private成员,外部(比如main函数)无法访问,因此编译器会提示需要将getName()设为public。

修复方案

1. 改为public继承

在定义子类时显式指定public继承,这样父类的public成员在子类中会保持public权限,外部可以正常调用:

// 修正继承方式为public
class salesperson : public abstractsales{
    // 原代码内容保持不变
};

2. 修正构造函数的赋值错误

你的带参构造函数里把name和position的赋值逻辑搞反了,应该调整为:

salesperson(string n, string p, int employeeID, int BID){
    this->name = n;  // 原代码误写为p,此处修正
    this->position = p;  // 原代码误写为n,此处修正
    this->EID = employeeID;
    this->bossID = BID;
    this->commission = 0.05;
}

3. 可选:将父类改为真正的抽象基类(若符合设计需求)

如果abstractsales是作为抽象基类设计的,可以添加纯虚函数强制子类实现特定逻辑,让它成为真正的抽象类:

class abstractsales{
public:
    // ... 现有成员 ...
    // 添加纯虚函数,强制子类实现
    virtual void addSale(double amt) = 0;
};

验证修复

修改后,在main中创建salesperson对象即可正常调用getName():

int main(){
    salesperson sp("Alice", "Sales", 1001, 1000);
    cout << sp.getName() << endl;  // 可正常编译运行
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:42:33