私は、名前、ID、セールスアマウント、手数料金額のような従業員のデータを格納し、収益(売上*手数料)を計算するC++プログラムを作成しています。私は継承の概念を使用しています。私の基本クラスは「Employee」で、派生クラスは「SeniorEmployee」です。プログラムを実行すると、コンパイラは私に基本クラスのプライベートメンバーにアクセスできないというエラーを返します。エラーが2行目に別のエラーが再び基底クラスのプライベート変数にアクセスするとエラーが発生する派生クラス
error: 'int Employee::id' is private
error: 'double Employee::sales' is private
私のコードで以下の3行目に同じエラーでこの
error: 'std::__cxx11::string Employee::name' is private.
のようなものです。私はすべてのファイルを含んでいます。
ファイルEmployee.h
#ifndef EMPLOYEE_H_
#define EMPLOYEE_H_
#include <iostream>
#include <string>
using namespace std;
class Employee {
public:
Employee(string EmpName, int EmpID, double EmpSales, double EmpComm);
void setName(string EmpName);
string getName();
void setID(int EmpID);
int getID();
void setSales(double EmpSales);
double getSales();
void setComm(double EmpComm);
double getComm();
double earning();
private:
string name;
int id;
double sales;
double commission;
};
#endif
ファイルEmployee.cpp
#include <iostream>
#include <string>
#include "Employee.h"
using namespace std;
Employee::Employee(string EmpName, int EmpID, double EmpSales, double EmpComm): name(EmpName), id(EmpID), sales(EmpSales), commission(EmpComm)
{
}
void Employee::setName(string EmpName) {
name=EmpName;
}
string Employee::getName() {
return name;
}
void Employee::setID(int EmpID) {
id=EmpID;
}
int Employee::getID() {
return id;
}
void Employee::setSales(double EmpSales) {
sales=EmpSales;
}
double Employee::getSales() {
return sales;
}
void Employee::setComm(double EmpComm) {
commission=EmpComm;
}
double Employee::getComm() {
return commission;
}
double Employee::earning() {
return sales*commission;
}
ファイルSeniorEmployee.h
#ifndef SENIOREMPLOYEE_H_
#define SENIOREMPLOYEE_H_
#include "Employee.h"
#include <iostream>
#include <string>
using namespace std;
class SeniorEmployee: public Employee {
public:
SeniorEmployee(string EmpName, int EmpID, double EmpSales, double EmpComm, double BaseSalary);
void setBaseSalary(double BaseSalary);
double getBaseSalary();
private:
double bsalary;
};
#endif
ファイルSeniorEmployee.cpp
#include <iostream>
#include <string>
#include "SeniorEmployee.h"
using namespace std;
SeniorEmployee::SeniorEmployee(string EmpName, int EmpID, double EmpSales, double EmpComm, double BaseSalary) : Employee(name,id,sales,commission)
{
}
void SeniorEmployee::setBaseSalary(double BaseSalary) {
bsalary=BaseSalary;
}
double SeniorEmployee::getBaseSalary() {
return bsalary;
}
ファイルmain.cppに
#include <iostream>
#include "SeniorEmployee.h"
using namespace std;
int main() {
string empname = "Fareed Shuja";
int empid = 3978;
double empsales = 30.0;
double empcomm = 0.99;
double basesalary = 50.0;
SeniorEmployee emp(empname,empid,empsales,empcomm,basesalary);
cout << "Name of the Employee is : " << emp.getName() << endl;
cout << "Employee ID is : " << emp.getID() << endl;
cout << "Sale Amount is : " << emp.getSales() << endl;
cout << "Commission is : " << emp.getComm() << endl;
cout << "Earning is : " << emp.earning() << endl;
cout << "Employee's base salary is " << emp.getBaseSalary() << endl;
return 0;
}
なぜあなたは基本クラスの 'private'メンバーにアクセスできるはずだと思いますか?なぜ彼らは「プライベート」なのか? –
私は彼らがプライベートメンバーにアクセスするいくつかのチュートリアルを持っています。このエラーは、SeniorEmployee.cppのこの行によって発生します。 'SeniorEmployee :: SeniorEmployee(string EmpName、int EmpID、double EmpSales、double EmpComm、double BaseSalary):従業員(名前、ID、売上、手数料) { }' –
_私は彼らがプライベートメンバーにアクセスするチュートリアルを持っています_ _チュートリアルは真剣に欠陥があるか間違っていますか、それを誤解しているのか、それともC++のものではありません。 –