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