【问题标题】:Add member to struct that is inherited from base class将成员添加到从基类继承的结构
【发布时间】:2013-12-27 13:17:11
【问题描述】:

在下面过于简化的示例中,class Derived 继承自 class Base 的私有成员/方法。我想做的是能够在派生类中的继承结构中添加一个额外的成员(double salary)。

struct Person {
  int age;
  int height;
};

class Base {
  protected:
     Person worker;
  public:
     double hours (Person *employee);
};

class Derived: public Base {
  private:
    //Class has an inherited member named "Person worker"
    //How do I add new member "double salary" to struct "Person worker"
    double salary (Person *manager); //A method that will rely on "double salary" 
};

也许像这样(如下弗拉德所建议的那样)会起作用,但有更好的方法吗?

struct Person {
  int age;
  int height;
};

struct Person2: Person {
  double salary;
}

class Base {
  private:
     Person worker;

  public:
     double hours (Person *employee);
};

class Derived: public Base {
  private:
    Person2 fulltime;
    double salary (Person2 *manager); //A method that will rely on "double salary" 
};

如果我错了,请纠正我,但Person worker 仍然由派生类继承,只是它不能直接访问(但同样被继承的hours 方法可以访问它,因为它是一部分基类)。

【问题讨论】:

  • 纯好奇:你能解释一下hours 方法的作用吗?
  • @KarolyHorvath:这是一个虚构的例子,但是 hours 方法,比如说,返回员工工作的小时数。基类可以用于普通工人,派生类可以用于全职经理,其工资而不是小时工资。
  • 你不能保护工人吗?还是给 Base 添加一个 getter 函数?
  • 为什么要传递一个Person?基类已经包含一个。
  • @KarolyHorvath:同样,由于这是一个虚构的例子,返回的小时数取决于另一个人的年龄/身高。我知道这听起来很有趣,但问题的重点是如何从派生类向结构添加新成员,同时能够从基类继承(结构)成员/方法。

标签: c++ inheritance


【解决方案1】:

如果我对你的理解正确,你需要在层次结构中再引入一个类。例如

struct Employee : Person
{
    double salary;
};

【讨论】:

  • 我仍然希望能够从基类继承方法(小时)和成员(员工)。也许我不清楚,但不使用这种层次结构意味着我会将此结构作为成员添加到派生类,但实际上不会从基类继承任何成员/方法?也许你可以澄清一下。
  • 除了引入多层次的层次结构之外,您不能将数据成员添加到类Person。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
  • 2018-08-01
  • 2017-02-22
  • 2018-02-10
  • 2017-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多