重写函数不打印基本 class 数据

Overridden function does not print base class data

我的代码中的 class 继承有问题。这是我正在做的事情:我有两个 classes,一个叫做 Employee,第二个叫做 ManagerEmployee是baseclass,它有打印名片的功能,包含公司名称和功能name(),打印员工的姓名。 ClassManager派生class继承(public:Employee)。当我尝试为经理打印同一张名片时,它不显示姓名,只显示公司名称。可能是什么问题呢? 下面是 Employee class:

的一小段
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 ;

} ;



其次,经理class:

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()函数中,因为如果我明确地写它,它就会出现在卡片上,尽管它不是继承的。 有人能帮忙吗?

当您调用 Employee::businessCard(); 时,它将调用 Employee 中的 const char* name() const { return _name.c_str() ; } class。但是在 Manager 对象的构建过程中,您还没有将名称传递给基础 class Employee,因此它没有在 Employee class 中设置并且你在打印时把它弄空了。

所以要让它工作,应该是这样的

Manager(const char* name, double salary, set<Employee*>& subordinates) : Employee(name,salary), _subs(subordinates)

并从管理器中删除 _name_salary 成员变量,因为它违背了本例中继承的目的。