C ++朋友类可以访问其基类的所有成员吗?

时间:2015-06-21 02:50:46

标签: c++ friend

我的理解是,朋友类可以访问基础的所有成员(包括数据成员)。但是,使用此代码:

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的所有成员?

2 个答案:

答案 0 :(得分:2)

错误是您在_name

中致电donald的地方

您无法通过类实例(本例中为_name)访问private,因为_nameDuck。由于friend指定,main类可以访问@property (nonatomic,assign) BOOL updated; ,但-(void)viewDidAppear:(BOOL)animated{ if (modalView.updated == YES) { // Do stuff modalView.updated = NO; } }

无法访问{{1}}

答案 1 :(得分:0)

  1. friend继承无关

  2. 您收到错误是因为main()而非Duck是试图访问_name的私人Animal成员的人。 Duck friend Animal Duckmain()授予printf("The donlad ran %s\n", donald._name.c_str());自己的方法权限,而不是main