【发布时间】:2020-01-15 20:56:56
【问题描述】:
我的代码中的类继承存在问题。这就是我正在做的事情:我有两个类,一个叫做 Employee,另一个叫做 Manager。 Employee 是基类,它有一个打印名片的函数,包含公司名称和函数name(),即打印员工的姓名。 Manager 类是派生类并继承(公共:Employee)。当我尝试为经理打印同一张名片时,它不显示姓名,只显示公司名称。可能是什么问题呢? 下面是Employee类的小sn-p:
class Employee {
public:
// Constructor
Employee(const char* name, double salary) : _name(name), _salary(salary) {}
Employee() : _name(" "), _salary(0) {} // default constructor
// Accessors
const char* name() const { return _name.c_str() ; }
double salary() const { return _salary ; }
// Modifyers (if needed)
double set_salary( double salary) {
_salary = salary;
return _salary;
}
// Print functions
void businessCard(ostream& os = cout) const {
os << " +------------------+ " << endl
<< " | ACME Corporation | " << endl
<< " +------------------+ " << endl
<< " " << name() << endl ;
}
private:
string _name ;
double _salary ;
} ;
其次,Manager 类:
class Manager : public Employee {
public:
// Constructors
Manager(const char* name, double salary, set<Employee*>& subordinates) :
_name(name), _salary(salary), _subs(subordinates) {}
...
// Accessors
const char* name() const {
string name;
name += _name;
name += " (Manager)";
return name.c_str() ;
}
void businessCard(ostream& os = cout) const {
Employee::businessCard();
}
private:
string _name ;
double _salary ;
} ;
我认为问题出在 name() 函数中,因为如果我明确地写它,它会出现在卡片上,尽管它不是继承的。 有人可以帮忙吗?
【问题讨论】:
-
顺便说一句,您应该避免返回
name.c_str()。name字符串将在您的name()函数结束时被破坏,因此,c_str()也将无效。理想情况下,不要直接处理普通的char *或const char *类型,尽可能使用std::string。 -
@dreamlax,是的,我也更喜欢 string 作为工作类型,但我的练习只是要求 const char*,所以我必须服从!感谢新西兰,你好!
-
姓名和薪水不应在经理中重新定义。
标签: c++ class inheritance class-hierarchy