错误回复:私有成员的继承?
Posted
技术标签:
【中文标题】错误回复:私有成员的继承?【英文标题】:Mistake re: inheritance of private members? 【发布时间】:2012-12-16 20:57:30 【问题描述】:这是一个错误吗?我认为私有成员不是从基类继承的:
"类HourlyEmployee的定义中没有提到成员变量name、ssn、netPay,但是类HourlyEmployee的每个对象都有成员变量name、ssn、netPay。成员变量name、ssn、netPay分别是继承自 Employee 类。”
//This is the header file hourlyemployee.h.
//This is the interface for the class HourlyEmployee.
#ifndef HOURLYEMPLOYEE_H
#define HOURLYEMPLOYEE_H
#include <string>
#include "employee.h"
using std::string;
namespace SavitchEmployees
class HourlyEmployee : public Employee
public:
HourlyEmployee( );
HourlyEmployee(const string& theName, const string& theSsn,
double theWageRate, double theHours);
void setRate(double newWageRate);
double getRate( ) const;
void setHours(double hoursWorked);
double getHours( ) const;
void printCheck( );
private:
double wageRate;
double hours;
;
//SavitchEmployees
#endif //HOURLYEMPLOYEE_H
其他头文件:
//This is the header file employee.h.
//This is the interface for the class Employee.
//This is primarily intended to be used as a base class to derive
//classes for different kinds of employees.
#ifndef EMPLOYEE_H
#define EMPLOYEE_H
#include <string>
using std::string;
namespace SavitchEmployees
class Employee
public:
Employee( );
Employee(const string& theName, const string& theSsn);
string getName( ) const;
string getSsn( ) const;
double getNetPay( ) const;
void setName(const string& newName);
void setSsn(const string& newSsn);
void setNetPay(double newNetPay);
void printCheck( ) const;
private:
string name;
string ssn;
double netPay;
;
//SavitchEmployees
#endif //EMPLOYEE_H
【问题讨论】:
【参考方案1】:所有成员都被子类继承。如果它们是私有的,则无法(直接)访问它们。它们仍然可以通过调用setName
等公共方法来间接访问。
【讨论】:
【参考方案2】:私有成员存在在子类中,但在大多数情况下不可访问。只有基类中的函数可以接触它们,没有friend
声明或字节级hackery。
【讨论】:
【参考方案3】:引用是正确的。所有数据成员,无论是否私有,都由派生类继承。这意味着每个派生类的每个实例都包含它们。但是,派生类不能直接访问私有成员。
但是,您可以通过公共或受保护的访问者(例如 getName()
)访问此类成员。
【讨论】:
【参考方案4】:为此,您拥有受保护的访问级别。 所以使用受保护的而不是私有的。
【讨论】:
以上是关于错误回复:私有成员的继承?的主要内容,如果未能解决你的问题,请参考以下文章