访问类c ++的所有私有成员

时间:2013-03-02 07:28:38

标签: c++ class access-specifier

我创建的课程如下(因为我不能把我真正的课程放在这里,我只写了一些例子)

 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方法函数来获取数据。

但在我真正的班级中有很多数据成员受到保护.. 你可以通过这个来点亮这个......

2 个答案:

答案 0 :(得分:1)

privateprotected成员变量应使用成员函数methods进行访问。

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

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

还有friend个功能,您可以直接从外部访问privateprotected个成员。

答案 1 :(得分:0)

main中,当您执行test.One_object时(您需要将One_object标记为public),您将直接获得One对象实例,但即便如此,您也无法访问One的私有成员,因为在此上下文中无法看到它们。所以,你有两个选择:

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

OR

2)让Three成为friend class One并为getterOne_object的每个成员变量写一个Three函数。< / p>

所以,按照选项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 here