我的理解是,朋友类可以访问基础的所有成员(包括数据成员)。但是,使用此代码:
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
无法访问基类Animal
的所有成员?
答案 0 :(得分:2)
错误是您在_name
donald
的地方
您无法通过类实例(本例中为_name
)访问private
,因为_name
为Duck
。由于friend
指定,main
类可以访问@property (nonatomic,assign) BOOL updated;
,但-(void)viewDidAppear:(BOOL)animated{
if (modalView.updated == YES) {
// Do stuff
modalView.updated = NO;
}
}
答案 1 :(得分:0)
friend
与继承无关。
您收到错误是因为main()
而非Duck
是试图访问_name
的私人Animal
成员的人。 Duck
friend
Animal
Duck
个main()
授予printf("The donlad ran %s\n", donald._name.c_str());
自己的方法权限,而不是main
。