抱歉,如果这是一个明显的问题,但我已经四处搜索,但我仍然不清楚如何解决这个问题。这是我的代码:
#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
如您所见,我希望“所有者”、“分类器”和“线圈编号”成为用户无法更改的私有成员。这些也因所讨论的班级而异。
问题:
问题是输出的最后两行。当派生类(ElecMagnet)继承返回这些成员的公共函数时,它返回基类的成员;不是它自己的。您可以看到这一点,因为它返回 PermMagnet 类的“分类器”和“线圈编号”。
有谁知道为什么派生类会这样?它不应该访问自己的私人成员而不是基地吗?