2012-12-16 56 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

您擁有受保護的訪問級別。 因此,使用保護而不是私人。