C++ 朋友 classes 可以访问其基 class 的所有成员吗?
C++ Can friends classes access all of the members of its base class?
我的理解是朋友class可以访问基地的所有成员(包括数据成员)。但是,使用此代码:
class Animal {
string _name;
Animal(){};
Animal(const string & n, const string & t, const string & w);
friend class Duck;
};
Animal::Animal(const string & n) : _name(n) {
}
class Duck: public Animal {
public:
Duck(const string n) : Animal(n){};
};
int main(int argc, char *argv[])
{
Duck donald("Donny");
printf("The donlad ran %s\n", donald._name.c_str());
return 0;
}
我得到error: '_name' is a private member of 'Animal'
为什么 friend class Duck
不能访问基地 class Animal
的所有成员?
friend
与继承无关.
您收到错误是因为 main()
而不是 Duck
试图访问 Animal
的私有 _name
成员。使 Duck
成为 Animal
的 friend
授予访问 Duck
自己的方法的权限,而不是 main()
.
错误是你在main
中调用printf("The donlad ran %s\n", donald._name.c_str());
的地方
您无法通过 class 实例(在本例中为 donald
)访问 _name
,因为 _name
是 private
。由于 friend
指定,_name
可从 Duck
class 中访问,但在 main
中不可访问
我的理解是朋友class可以访问基地的所有成员(包括数据成员)。但是,使用此代码:
class Animal {
string _name;
Animal(){};
Animal(const string & n, const string & t, const string & w);
friend class Duck;
};
Animal::Animal(const string & n) : _name(n) {
}
class Duck: public Animal {
public:
Duck(const string n) : Animal(n){};
};
int main(int argc, char *argv[])
{
Duck donald("Donny");
printf("The donlad ran %s\n", donald._name.c_str());
return 0;
}
我得到error: '_name' is a private member of 'Animal'
为什么 friend class Duck
不能访问基地 class Animal
的所有成员?
friend
与继承无关.您收到错误是因为
main()
而不是Duck
试图访问Animal
的私有_name
成员。使Duck
成为Animal
的friend
授予访问Duck
自己的方法的权限,而不是main()
.
错误是你在main
printf("The donlad ran %s\n", donald._name.c_str());
的地方
您无法通过 class 实例(在本例中为 donald
)访问 _name
,因为 _name
是 private
。由于 friend
指定,_name
可从 Duck
class 中访问,但在 main