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++ 我将person类继承为employee和manager,但可以';t打印从person类方法调用的person类的成员为什么?_C++_Oop - Fatal编程技术网

C++ 我将person类继承为employee和manager,但可以';t打印从person类方法调用的person类的成员为什么?

C++ 我将person类继承为employee和manager,但可以';t打印从person类方法调用的person类的成员为什么?,c++,oop,C++,Oop,我创建了person、employee、manager类并在多级继承,但当我从调用employee类print方法的manager类调用print方法时,调用了person类print方法,但不打印person类的成员 不要比较输出序列,其他方法我到目前为止还没有实现,只要看看输出没有显示姓名、性别、年龄。 #包括 #包括 使用std::cout; 使用std::cin; 使用std::endl; 使用std::string; 班主任 { 年龄短; 受保护的: 字符串性别; 字符串名; 公众:

我创建了person、employee、manager类并在多级继承,但当我从调用employee类print方法的manager类调用print方法时,调用了person类print方法,但不打印person类的成员

不要比较输出序列,其他方法我到目前为止还没有实现,只要看看输出没有显示姓名、性别、年龄。

#包括
#包括
使用std::cout;
使用std::cin;
使用std::endl;
使用std::string;
班主任
{
年龄短;
受保护的:
字符串性别;
字符串名;
公众:
Person(){};
人员(字符串名称、字符串性别、短年龄)
{
此->名称=名称;
这->性别=性别;
这个->年龄=年龄;
if(性别!=“男性”和性别!=“女性”)
{
这->性别=“其他”;
}
}
作废打印()
{
自>>年薪以来不能雇佣员工;
员工=新员工(姓名、性别、年龄、部门、,
名称,自,
年薪);
经理。添加直接报告(员工ptr);
}
getchar();//从输入缓冲区中删除换行符
字符串现有的_名称,新的_名称;
cin>>现有的\u名称>>新的\u名称;
经理。变更指定(现有指定、新指定);
浮动增量百分比;
cin>>名称>>增量百分比;
经理。增加工资(指定、增加百分比);
manager.print();
返回0;
}
输入:

Reshma female 40 Engineering SeniorManager 1-1-1997 3000000
3
Rachit male 28 Engineering JuniorDeveloper 10-07-2013 1200000
Rahi female 32 Engineering SeniorDeveloper 2009 1800000
Raman male 34 Engineering Developer 07-10-2010 1600000
Developer SeniorDeveloper
SeniorDeveloper 5.5
我想要的输出:

E1 Rahi female 32 Engineering SeniorDeveloper 2009 1899000
E1 Raman male 34 Engineering SeniorDeveloper 07-10-2010 1688000
E1 Rachit male 28 Engineering JuniorDeveloper 10-07-2013 1200000
我得到的是:

E1  0 Engineering JuniorDeveloper 10-07-2013 1200000
E1  0 Engineering SeniorDeveloper 2009 1800000
E1  0 Engineering Developer 07-10-2010 1600000
在构造函数中:

Employee(string name,string gender,short age,string department,string designation,
         string employee_since,int yearly_salary) {
    
    Person(name,gender,age);  // doesn't do anything
    // ...
}
第一行实际上并没有调用
Person
构造函数,它只是创建了一个被丢弃的临时值,因此您只需看到打印的默认值。这些是
name
gender
的空字符串。(请注意,
age
的0不能保证,因为它没有初始化,这会调用未定义的行为。)

调用基类构造函数的正确方法是使用成员初始值设定项列表:

Employee(string name,string gender,short age,string department,string designation,
         string employee_since,int yearly_salary)
 : Person(name,gender,age) {
  // ...
}

方法需要是
virtual
,以便在
Manager
构造函数中重写,请考虑
Employee Manager=Employee实际上是指。这意味着经理也是一名员工。