доступ ко всем закрытым членам класса переполнения стека

Я создал несколько классов, как показано ниже (Так как я не могу поставить свой реальный класс, здесь я написал несколько в качестве примера)

 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 для получения данных.

Но в моем реальном классе есть много данных, члены которых защищены ..
Можете ли вы кого-нибудь через свет на это ..

0

Решение

private а также protected переменные-члены предназначены для доступа с помощью функций-членов ака methods,

methods которые предназначены для использования только внутри другого method одного и того же класса, но не извне, снова должны быть частными или защищенными.

Выбор private vs protected зависит от того, будете ли вы наследовать от этого класса или нет. Рекомендуется использовать защищенный для всех членов, так что любой класс, который наследует (может быть в будущем) от этого класса, также получает выгоду, получая доступ к этим членам.

И здесь friend функции, которые позволяют вам получить доступ private или же protected члены извне тоже напрямую.

1

Другие решения

В 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 Вот.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector