2012-12-16 34 views
0

这是错的?我认为私人成员不是从基类继承的:错误重复:私人成员的继承?

“类HourlyEmployee的定义没有提到成员变量名称,ssn和netPay,但HourlyEmployee类的每个对象都有成员变量namedname,ssn ,和netPay。成员变量名称,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 

回答

3

所有成员都由子类继承。如果他们是私人的,他们就不能被直接访问。仍然可以通过调用公共方法(如setName)间接访问它们。

+0

行了,谢谢! :d – jyim

2

私有成员存在于子类,但不是在大多数情况下使用。只有基类中的函数可以触及它们,因为没有friend声明或字节级别的hackery。

2

该报价是正确的。所有数据成员,不管是否私有,都由派生类继承。这意味着每个派生类的每个实例都包含它们。但是,私有成员不能直接被派生类访问。

但是,您可以通过公共或受保护的访问者访问此类成员,例如getName()

-1

您拥有受保护的访问级别。 因此,使用保护而不是私人。