我创建的课程如下(因为我不能把我真正的课程放在这里,我只写了一些例子)
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方法函数来获取数据。
但在我真正的班级中有很多数据成员受到保护.. 你可以通过这个来点亮这个......
答案 0 :(得分:1)
private
和protected
成员变量应使用成员函数methods
进行访问。
methods
只能在同一个班级的另一个method
内部使用但不能从外部使用,应再次为私有或受保护。
选择private vs protected
取决于您是否继承该课程。建议对所有成员使用protected,以便从该类继承(可能在将来)的任何类也可以通过访问这些成员来获益。
还有friend
个功能,您可以直接从外部访问private
或protected
个成员。
答案 1 :(得分:0)
在main
中,当您执行test.One_object
时(您需要将One_object
标记为public
),您将直接获得One
对象实例,但即便如此,您也无法访问One
的私有成员,因为在此上下文中无法看到它们。所以,你有两个选择:
1)如果类One
可编辑,则需要将必须从main访问的变量标记为public
OR
2)让Three
成为friend class
One
并为getter
中One_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 class
和friend functions
here。