多态性错误C++

Polymorphism Error C++

本文关键字:C++ 错误 多态性      更新时间:2023-10-16

我正在尝试从这些类创建一个对象,但在此行的main()中出现错误:

employee1->employeeId(29);

该错误只是说"employeeId 设置为受保护",但这应该有效。感谢所有的帮助:)

这是我下面的代码:

代码已删除*

编译器是正确的,employeeId受到保护。您确定您不是故意使用setEmployeeId吗?

例如

employee1->setEmployeeId(29);

是的,它是受保护的,因此您不能从main只能从派生类的方法访问它。而且您不能将其用作函数:employee1->employeeId(29);它是 int 类型的成员变量。

受保护意味着只有派生(子)类才能看到该成员。 派生类的用户看不到它,就像父类的用户看不到它一样。 在继承中使用"public"不会改变对所有成员的保护,但控制对父级的保护免受子项的用户和/或子项的影响。

这是另一个包含相关信息的线程:私有继承、公共继承和受保护继承之间的区别

作为这里的一般经验法则,您不应该使用 set 方法来简单地返回数据——从风格上讲,这应该是getId()的;您的二传手实际上应该设置数据。但话又说回来,看起来你的父母已经有一个二传手,所以添加一个吸盘手并从你的孩子身上删除所有东西。

只需遵循此样式,就可以对类进行一些清理。

class Employees{
    protected:      
        int employeeId; 
        //string name;
    public:         
        void setEmployeeId(int a)
        { employeeId = a; }    
        int getEmployeeId()
        { return employeeId; }    
};
class cashier: public Employees{
    public:
    // no need for anything here -- the methods you need are inherited  
};
int main(){
    cashier c;      
    c.setEmployeeId(29);
    cout << "Employee ID: " << c.getEmployeeId() << endl;
}