Я создал несколько классов, как показано ниже (Так как я не могу поставить свой реальный класс, здесь я написал несколько в качестве примера)
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
}
Вот что было бы лучшим способом доступа к приватным членам, если бы это было только значение для acess, тогда я мог бы написать функцию get для получения данных.
Но в моем реальном классе есть много данных, члены которых защищены ..
Можете ли вы кого-нибудь через свет на это ..
private
а также protected
переменные-члены предназначены для доступа с помощью функций-членов ака methods
,
methods
которые предназначены для использования только внутри другого method
одного и того же класса, но не извне, снова должны быть частными или защищенными.
Выбор private vs protected
зависит от того, будете ли вы наследовать от этого класса или нет. Рекомендуется использовать защищенный для всех членов, так что любой класс, который наследует (может быть в будущем) от этого класса, также получает выгоду, получая доступ к этим членам.
И здесь friend
функции, которые позволяют вам получить доступ private
или же protected
члены извне тоже напрямую.
В main
когда вы делаете test.One_object
(нужно пометить One_object
как public
хотя), вы получаете One
экземпляр объекта напрямую, но даже тогда вы не можете получить доступ к закрытым членам One
потому что они не видны из этого контекста. Итак, у вас есть два варианта:
1) Если класс One
редактируемый, вам нужно пометить переменные, к которым вы ДОЛЖНЫ обращаться из main, как public
ИЛИ ЖЕ
2) Сделать Three
friend class
из One
и написать getter
функция для каждой переменной-члена One_object
в Three
,
Итак, следующий вариант 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
Вот.