Форум программистов, компьютерный форум CyberForum.ru

Зависимость значений от модификатора доступа - C++

Восстановить пароль Регистрация
 
Egor138
 Аватар для Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
24.06.2013, 14:22     Зависимость значений от модификатора доступа #1
Здравствуйте!

У меня возник очень странный вопрос, с которым я совсем запутался

вот функция, которая работает с переменными какого-то объекта класса:

C++
1
2
3
4
5
6
    void set_adr(string adr_, Directory *dr)  
    {
        dr->adr = adr_+"\\"+dr->name; 
        for(size_t i=0; i<dr->Folders.size(); ++i)
                      set_adr(dr->adr, dr->Folders.at(i));
    }
Есть класс Directory в котором в разделе public описанны переменные: adr, name;
Все работает отлично

Теперь я немного изменю класс, из этого

C++
1
2
3
4
5
6
7
8
9
10
11
12
class Directory
{
    public:
//....
        string adr; 
        string name;
        Directory *parent;
        vector <Directory*> Folders;
 
//....
 
};
НА ВОТ ЭТО

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Directory  
{
    private:
        string adr; 
        string name;
        Directory *parent;
    public:
        vector <Directory*> Folders;
 
        string get_name(void) {return name;}
        string get_adr(void) {return adr;}
        Directory* get_parent(void) {return parent;}
};
Тоесть я просто переменные переместил в Private и создал соответствующие функции для доступа к этим переменным из вне класса.

Соответственно функция изменилась на вот это

C++
1
2
3
4
5
6
    void set_adr(string adr_, Directory *dr)
    {
        dr->get_adr() = adr_+"\\"+dr->get_name(); 
        for(size_t i=0; i<dr->Folders.size(); ++i)
                      set_adr(dr->get_adr(), dr->Folders.at(i));
    }
Но теперь она работает совсем не правильно, эти переменные adr, name соовсем не такие, какими должны быть
Я совсем ничего не могу понять, вроде код аналогичный, а значаения разные!!!

Добавлено через 10 минут

______________________________________________________________________
Все я разобрался, я что-то совсем туплю.

Просто заменил строку


C++
1
dr->get_adr = adr_+"\\"+dr->get_name();// Здесь ошибка!!!!!!!!!
на


C++
1
dr->set_address(adr_+"\\"+dr->get_name());
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2013, 14:22     Зависимость значений от модификатора доступа
Посмотрите здесь:

почему обявление уровня доступа является нежелательным способом предявления доступа, в отличии от использования пространстрва имён? C++
C++ Реккуреннтная зависимость
C++ Странная зависимость от размерности массива
Иерархическая зависимость классов C++
Как убрать зависимость C++
Взаимная зависимость модулей C++
C++ Циклическая зависимость классов
C++ Зависимость от динамических библиотек

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
24.06.2013, 16:51     Зависимость значений от модификатора доступа #2
C++
1
dr->get_adr() = adr_+"\\"+dr->get_name();
это работать не будет потому что Вы возвращаете копию строки
Цитата Сообщение от Egor138 Посмотреть сообщение
C++
1
string get_adr(void) {return adr;}
а надо ссылку
C++
1
string& get_adr(void) {return adr;}
Yandex
Объявления
24.06.2013, 16:51     Зависимость значений от модификатора доступа
Ответ Создать тему
Опции темы

Текущее время: 12:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru