将成员添加到从基类继承的结构

Posted

技术标签:

【中文标题】将成员添加到从基类继承的结构【英文标题】: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:同样,由于这是一个虚构的例子,返回的小时数取决于另一个人的年龄/身高。我知道这听起来很有趣,但问题的重点是如何从派生类向结构添加新成员,同时能够从基类继承(结构)成员/方法。 【参考方案1】:

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

struct Employee : Person

    double salary;
;

【讨论】:

我仍然希望能够从基类继承方法(小时)和成员(员工)。也许我不清楚,但不使用这种层次结构意味着我会将此结构作为成员添加到派生类,但实际上不会从基类继承任何成员/方法?也许你可以澄清一下。 除了引入多层次的层次结构之外,您不能将数据成员添加到类Person。

以上是关于将成员添加到从基类继承的结构的主要内容,如果未能解决你的问题,请参考以下文章

继承和友元函数,从基类访问受保护的成员

C++中子类从基类都继承啥?

3.继承与派生

C# 使用new 关键字显式隐藏从基类继承的成员和内部类的使用

从基类到不同派生类的多重继承转换

从基类访问子类成员的首选方式