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

