これが明らかな場合は申し訳ありませんが、私は周りを検索しましたが、この問題の解決方法についてはまだ不明です. これが私のコードです:
#include <iostream>
#include <string>
using namespace std;
class PermMagnet {
public:
string name;
int ac_rating;
int dc_rating;
int mass_kg;
int age;
PermMagnet(){
// default constructor
name = "";
ac_rating = 0; dc_rating = 0;
mass_kg = 0; age = 0;
}
PermMagnet(string c_name, int c_ac_rating, int c_dc_rating, int c_mass_kg, int c_age){
// parameterised constructor
name = c_name;
ac_rating = c_ac_rating;
dc_rating = c_dc_rating;
mass_kg = c_mass_kg;
age = c_age;
}
string get_owner(){
return owner;
}
string get_classifier(){
return classifier;
}
int get_coil_count(){
return coil_num;
}
protected:
string location = "facility hall";
private:
string owner = "Unspecified Staff";
string classifier = "MAG-DP-";
const int coil_num = 2;
};
class ElecMagnet : public PermMagnet {
public:
// inherit base class constructors
using PermMagnet::PermMagnet;
string get_location(){
return location;
}
private:
string owner = "Specified Staff";
string classifier = "MAG-QD-";
const int coil_num = 4;
};
int main() {
// Create object using default constructor
PermMagnet perm1;
cout << "'perm1' age: " << perm1.age << endl;
// Create object using parameterised constructor
PermMagnet perm2("PermMagnet 2", 380, 400, 1500, 35);
cout << "'perm2' age: " << perm2.age << " | 'perm2' name: " << perm2.name << endl;
cout << "Owner of 'perm2': " << perm2.get_owner() << endl;
cout << "Upper current bound of 'perm2': " << perm2.get_current_limit("upper") << "A" << endl;
cout << "Number of coils in 'perm2': " << perm2.get_coil_count() << endl << endl;
// Create a ElecMagnet (derived class) object
ElecMagnet elec1("ElecMagnet 1", 170, 200, 850, 27);
cout << elec1.get_classifier() << endl;
cout << elec1.get_coil_count() << endl;
return 0;
}
このコードの出力は次のとおりです。
'perm1' age: 0
'perm2' age: 35 | 'perm2' name: PermMaget 2
Owner of 'perm2': Unspecified Staff
Upper current bound of 'perm2': 780A
Number of coils in 'perm2': 2
MAG-DP-
2
Process finished with exit code 0
ご覧のとおり、"owner"、"classifier"、"coil_num" を、ユーザーが変更できないプライベート メンバーにする必要があります。これらは、問題のクラスによっても異なります。
問題:
問題は、出力の最後の 2 行です。派生クラス (ElecMagnet) がこれらのメンバーを返すパブリック関数を継承すると、基本クラスのメンバーが返されます。自分のものではありません。これは、PermMagnet クラスの「classifier」と「coil_num」を返すため、わかります。
派生クラスがこのように動作する理由を誰かが知っていますか? ベースではなく、独自のプライベートメンバーにアクセスするべきではありませんか?