0

我创建了几个类如下(因为我不能把我的真实类在这里我写了几个作为例子)

 class One {
      private :
         char *link;
         int count 

        }


 class Two {
      private :
         char *link;
         int count 

        }

 class  Three :: public TWO  {
      private :
         char *link;
         int count ;
          One One_object;

        }

 int main() {

     Three test;
     cout << test.One_object.link ; // error becoz of accessing private member 

       }

在这里,访问私有成员的最佳方式是什么,如果它只是访问的价值,那么我可以编写一个 get 方法函数来获取数据。

但是在我真正的课堂上有很多数据成员受到保护..你能不能通过这个..

4

2 回答 2

1

private成员protected变量旨在使用成员函数 aka 访问methods

只能在同一类的methods另一个内部使用但不能从外部使用的应该再次是私有的或受保护的。method

选择private vs protected取决于您是否将从该类继承。建议对所有成员使用受保护的,以便从此类继承(可能在将来)的任何类也可以通过访问这些成员而受益。

还有一些friend功能可以让您直接从外部访问private或访问成员。protected

于 2013-03-02T07:34:21.253 回答
0

main中,当您这样做时test.One_object(您需要标记One_objectpublic好像),您将One直接获取对象实例,但即使如此,您也无法访问私有成员,One因为它们在此上下文中不可见。所以,你有两个选择:

1) 如果 ClassOne是可编辑的,则需要将必须从 main 访问的变量标记为public

或者

2)为in的每个成员变量创建Three一个friend classofOne并编写一个函数。getterOne_objectThree

因此,遵循选项 2-

class One {
      private :
         char *link;
         int count;

      friend class Three;
};
class  Three : public Two  {
      private :
         char *link;
         int count ;
      public:
         One One_object;
         int get_One_object_count(){
            return One_object.count;
         }

};

我认为您可能会重新考虑类的设计,因为从全局上下文中访问成员并不是一个很好的设计实践。

阅读更多关于friend classfriend functions 这里

于 2013-03-02T08:28:09.527 回答