Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将子类方法声明为基类的友元 我是C++和OOP的新手,我遇到了一个我费尽心思的问题。我被要求设计代表员工和经理的课程。我的实现如下 class Manager; class Employee { private: int salary; public: std::string name; Manager* manager; Employee(int salary, std::string name, Manager* manager) : salary(salary), name(name), manager(manager) {} int getSalary() { return this->salary; } friend int Manager::giveRaise(Employee, int); // incomplete type manager named in nested name specifier }; class Manager : Employee { private: std::string perks; std::vector<Employee> employees; public: Manager(std::string perks, int salary, std::string name, Manager* manager) : Employee(salary, name, manager) { this->perks = perks; } int getEmployeeSalary(Employee e) { if (e.manager == this) { return e.getSalary(); } throw new std::invalid_argument("Employee is not managed by this manager"); } int giveRaise(Employee e, int new_salary) { if (e.manager == this) { e.salary = new_salary; // Can't access private method } } }; 班级经理; 班级员工{ 私人: 国际工资; 公众: std::字符串名; 经理*经理; 员工(int-salary,std::string name,Manager*Manager):工资(salary),姓名(name),经理(Manager){} int getSalary(){ 返回此->工资; } friend int Manager::giveRaise(Employee,int);//嵌套名称说明符中命名的类型管理器不完整 }; 班级经理:员工{ 私人: 字符串额外津贴; 病媒雇员; 公众: 经理(std::string perks,int salary,std::string name,Manager*Manager):员工(salary,name,Manager){ 这->津贴=津贴; } int getEmployeeSalary(员工e){ 如果(e.manager==此){ 返回e.getSalary(); } 抛出新std::无效的_参数(“员工不受此经理管理”); } 内部加薪(员工e、内部新工资){ 如果(e.manager==此){ e、 salary=new_salary;//无法访问私有方法 } } };_C++_Oop - Fatal编程技术网

将子类方法声明为基类的友元 我是C++和OOP的新手,我遇到了一个我费尽心思的问题。我被要求设计代表员工和经理的课程。我的实现如下 class Manager; class Employee { private: int salary; public: std::string name; Manager* manager; Employee(int salary, std::string name, Manager* manager) : salary(salary), name(name), manager(manager) {} int getSalary() { return this->salary; } friend int Manager::giveRaise(Employee, int); // incomplete type manager named in nested name specifier }; class Manager : Employee { private: std::string perks; std::vector<Employee> employees; public: Manager(std::string perks, int salary, std::string name, Manager* manager) : Employee(salary, name, manager) { this->perks = perks; } int getEmployeeSalary(Employee e) { if (e.manager == this) { return e.getSalary(); } throw new std::invalid_argument("Employee is not managed by this manager"); } int giveRaise(Employee e, int new_salary) { if (e.manager == this) { e.salary = new_salary; // Can't access private method } } }; 班级经理; 班级员工{ 私人: 国际工资; 公众: std::字符串名; 经理*经理; 员工(int-salary,std::string name,Manager*Manager):工资(salary),姓名(name),经理(Manager){} int getSalary(){ 返回此->工资; } friend int Manager::giveRaise(Employee,int);//嵌套名称说明符中命名的类型管理器不完整 }; 班级经理:员工{ 私人: 字符串额外津贴; 病媒雇员; 公众: 经理(std::string perks,int salary,std::string name,Manager*Manager):员工(salary,name,Manager){ 这->津贴=津贴; } int getEmployeeSalary(员工e){ 如果(e.manager==此){ 返回e.getSalary(); } 抛出新std::无效的_参数(“员工不受此经理管理”); } 内部加薪(员工e、内部新工资){ 如果(e.manager==此){ e、 salary=new_salary;//无法访问私有方法 } } };

将子类方法声明为基类的友元 我是C++和OOP的新手,我遇到了一个我费尽心思的问题。我被要求设计代表员工和经理的课程。我的实现如下 class Manager; class Employee { private: int salary; public: std::string name; Manager* manager; Employee(int salary, std::string name, Manager* manager) : salary(salary), name(name), manager(manager) {} int getSalary() { return this->salary; } friend int Manager::giveRaise(Employee, int); // incomplete type manager named in nested name specifier }; class Manager : Employee { private: std::string perks; std::vector<Employee> employees; public: Manager(std::string perks, int salary, std::string name, Manager* manager) : Employee(salary, name, manager) { this->perks = perks; } int getEmployeeSalary(Employee e) { if (e.manager == this) { return e.getSalary(); } throw new std::invalid_argument("Employee is not managed by this manager"); } int giveRaise(Employee e, int new_salary) { if (e.manager == this) { e.salary = new_salary; // Can't access private method } } }; 班级经理; 班级员工{ 私人: 国际工资; 公众: std::字符串名; 经理*经理; 员工(int-salary,std::string name,Manager*Manager):工资(salary),姓名(name),经理(Manager){} int getSalary(){ 返回此->工资; } friend int Manager::giveRaise(Employee,int);//嵌套名称说明符中命名的类型管理器不完整 }; 班级经理:员工{ 私人: 字符串额外津贴; 病媒雇员; 公众: 经理(std::string perks,int salary,std::string name,Manager*Manager):员工(salary,name,Manager){ 这->津贴=津贴; } int getEmployeeSalary(员工e){ 如果(e.manager==此){ 返回e.getSalary(); } 抛出新std::无效的_参数(“员工不受此经理管理”); } 内部加薪(员工e、内部新工资){ 如果(e.manager==此){ e、 salary=new_salary;//无法访问私有方法 } } };,c++,oop,C++,Oop,不幸的是,我不能将giveRaise方法声明为friend,因为那时我还没有定义manager类。但是,我不确定如何重新排列代码以避免此错误。我不想保护薪资字段,因为我只希望特定的经理能够访问它 感谢您的帮助。在employee类中为该字段编写一个getter方法,用于检查调用方是否是经理。如果是,请返回值。您的努力必须公开显示(例如您的代码)。设置此任务的人对公共和私人的目的有严重误解。经理奖金=10*总和(员工奖金)。这就是您需要知道的所有内容。@d4rk4ng31:由于多个管理级别很常见,

不幸的是,我不能将giveRaise方法声明为friend,因为那时我还没有定义manager类。但是,我不确定如何重新排列代码以避免此错误。我不想保护薪资字段,因为我只希望特定的经理能够访问它


感谢您的帮助。

在employee类中为该字段编写一个getter方法,用于检查调用方是否是经理。如果是,请返回值。

您的努力必须公开显示(例如您的代码)。设置此任务的人对公共和私人的目的有严重误解。
经理奖金=10*总和(员工奖金)
。这就是您需要知道的所有内容。@d4rk4ng31:由于多个管理级别很常见,
经理
应该继承自
员工
。我不知道一个
Person
抽象类是否有用。能够读取另一个类的
private
数据的唯一方法是a)一个可访问的getter函数和B)friendship。