我知道这可能是一个愚蠢但我甚至不知道如何命名这个问题。我是非母语英语。我从一本书中学习C ++,并且有一个程序显示员工(基类)和Manager
(派生类)的名称和工资率,并添加了bool
变量salaried
。这是源代码:
//base class
class Employee {
private:
string name;
double pay;
public:
Employee() {
name = "";
pay = 0;
}
Employee(string empName, double payRate) {
name = empName;
pay = payRate;
}
string getName() const {
return name;
}
void setName(string empName) {
name = empName;
}
double getPay() const {
return pay;
}
void setPay(double payRate) {
pay = payRate;
}
string toString() {
stringstream stm;
stm << name << ": " << pay;
return stm.str();
}
};
//derived class
class Manager : public Employee {
private:
bool salaried;
public:
Manager(string name, double payRate, bool isSalaried)
:Employee(name, payRate)
{
salaried = isSalaried;
}
bool getSalaried() {
return salaried;
}
};
int main()
{
Employee emp1("Mary Smith", 15.00);
cout << "Employee name: " << emp1.getName() << endl;
cout << "Employee pay rate: " << emp1.getPay() << endl;
Manager emp2("Bob Brown", 1500, true);
cout << "Employee name: " << emp2.getName() << endl;
cout << "Employee pay rate: " << emp2.getPay() << endl;
cout << "Is Salaried: " << emp2.getSalaried() << endl;
return 0;
}
有人可以解释一下为什么这部分
:Employee(name, payRate)
必须添加到代码才能正常工作吗?
答案 0 :(得分:1)
它调用基类的(Employee)构造函数并将name
和payRate
传递给它,因为它们是Employee的成员。
答案 1 :(得分:1)
部分
:Employee(name, payRate)
你提到用于调用构造函数
Employee(string empName, double payRate)
执行构造函数体之前的基类Employee
的
Manager(string name, double payRate, bool isSalaried)
派生类Manager
。
答案 2 :(得分:0)
:Employee(name, payRate)
是类Manager
继承的基类的初始化。
答案 3 :(得分:0)
实际上没有这一行代码应该编译正常(因为你有Employee
的默认构造函数),但是从Employee
继承的字段将无法在emp2
中正确初始化。这部分代码的作用是调用Employee
的构造函数来初始化从该类继承的字段。
答案 4 :(得分:0)
在构造函数名为initialization list的冒号之后发生了什么,在您的情况下,它只是使用合适的构造函数启动基类
答案 5 :(得分:0)
即使没有构造函数,代码也可以正常工作(即,您可以使用默认构造函数接受变量并实现两种方法来填充name
和pay
。)
class Employee {
private:
string name;
string temp_name;
double temp_pay;
double pay;
public:
Employee() {
name = temp_name;
pay = temp_pay;
}
void getTempname(string tem){temp_name = tem;}
void getTemppay(double py){ temp_pay = pay;}
};