Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> передача приватных данных между классами 
:(
    Опции темы
Mr_Nuke
Дата 17.5.2011, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 6.4.2007

Репутация: нет
Всего: нет



Подскажите, хочу передать указатель in из класса file в класс A. 

Код

class file{    
    public:
        file();        
        ifstream &ReturnIn(){return (in1);}; //  Как вариант, пробовал и такой способ
    private:
        ifstream in1;        
};


class A{    
    public: 
        A();
        void SetIn(ifstream in){in1 = in;}  //  Вторая часть метода
    private:        
        ifstream in1;        
};


Пробовал объявить класс file дружественным к классу А и передать объект класса file в метод класса A в виде параметра. Может не правильно делал, но выдавал ошибку доступа. (Если так сделать нельзя, то вообще не понимаю, зачем нужна дружба)
Код

class file{
    friend A;
    public:
        file();
    private:
        ifstream in1;
        
};

class A{    
    public: 
        A(file);
    private:        
        ifstream in1;        
};

A::A(file F){in1 = F::in1;};

void main(){
              file F;
              A obj(F);
}


И последний способ, пытался вернуть ссылку на in и через главную программу передать значение в класс A. Надоело наугад ставить значки "*" и "&", поэтому обратился за помощью сюда!

 

Это сообщение отредактировал(а) Mr_Nuke - 17.5.2011, 17:52
PM MAIL   Вверх
Cheloveck
Дата 17.5.2011, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 3
Всего: 32



Код

class file{    
    public:
        file();        
        ifstream &ReturnIn(){return (in1);};
    private:
        ifstream in1;        
};
class A{    
    public: 
        A();
        void SetIn(ifstream & in){in1 = ∈}
    private:        
        ifstream * in1;        
};

Только возвращать не константную ссылку на приватный член - не хорошо. Подумай над задачей получше!

Это сообщение отредактировал(а) Cheloveck - 17.5.2011, 18:06


--------------------
user posted image
PM Jabber   Вверх
Mr_Nuke
Дата 17.5.2011, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 6.4.2007

Репутация: нет
Всего: нет



Cheloveck, скорее, я просто не понимаю, как на практике применить * и &. 
Путем рандомного тыкания  у меня появилось 3 варианта, и в обоих ошибка доступа :(
Код

ifstream ReturnIn(){return (in1);};


Код

ifstream *ReturnIn(){return (&in1);};


Код

ifstream &ReturnIn(){return (*(&in1));};  //  Это вычитал из главы про константные ссылки :)


Это сообщение отредактировал(а) Mr_Nuke - 17.5.2011, 18:36
PM MAIL   Вверх
mes
Дата 17.5.2011, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Mr_Nuke @  17.5.2011,  16:51 Найти цитируемый пост)
      A(file);
    private:        
        ifstream in1; 

A::in1 никакого отношения не имеет к file::in1


--------------------
PM MAIL WWW   Вверх
Mr_Nuke
Дата 17.5.2011, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 6.4.2007

Репутация: нет
Всего: нет



mes, это я понимаю... только не пойму, где у меня показано обратное...

Это сообщение отредактировал(а) Mr_Nuke - 17.5.2011, 20:12
PM MAIL   Вверх
mes
Дата 17.5.2011, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Mr_Nuke @  17.5.2011,  16:51 Найти цитируемый пост)
in1 = in;

istream`ы не копируются.. храните в ведомых объектах ссылку/указатель на поток

Добавлено через 54 секунды
Цитата(Mr_Nuke @  17.5.2011,  18:47 Найти цитируемый пост)
это я понимаю... только не пойму, где у меня показано обратное...

в первом блоке кода не было видно связи по их совместному использованию.. а во второй блок не посмотрел.. smile


--------------------
PM MAIL WWW   Вверх
Mr_Nuke
Дата 17.5.2011, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 6.4.2007

Репутация: нет
Всего: нет



Цитата(mes @ 17.5.2011,  20:49)
istream`ы не копируются.. храните в ведомых объектах ссылку/указатель на поток

Ну с этим по понятней! Но все же интересует, как из одного класса изменять приватные данные другого!
PM MAIL   Вверх
mes
Дата 17.5.2011, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Mr_Nuke @  17.5.2011,  22:08 Найти цитируемый пост)
 как из одного класса изменять приватные данные другого! 


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


--------------------
PM MAIL WWW   Вверх
Mr_Nuke
Дата 18.5.2011, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 6.4.2007

Репутация: нет
Всего: нет



эм. Может я тебя не совсем понял. посмотри мой первый пост, второй блок. Там я делал через друга, но появляется ошибка доступа 
PM MAIL   Вверх
mes
Дата 18.5.2011, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Mr_Nuke @  17.5.2011,  23:23 Найти цитируемый пост)
 посмотри мой первый пост, второй блок.


вот тот же ужас, но в рабочем состоянии :
http://liveworkspace.org/code/cae083da92a7...d1370853a8e25b8

Это сообщение отредактировал(а) mes - 18.5.2011, 00:36


--------------------
PM MAIL WWW   Вверх
Mr_Nuke
Дата 18.5.2011, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 6.4.2007

Репутация: нет
Всего: нет



mes,  хоть в написанном там коде для меня не все понятно, но результатом я доволен!! Спасибо)))))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3603 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.