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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
senich
61 / 61 / 23
Регистрация: 22.11.2012
Сообщений: 242
Записей в блоге: 1
#1

Потоки и сокрытие данных - C++

03.07.2015, 16:25. Просмотров 208. Ответов 3
Метки нет (Все метки)

Всем доброго времени суток. Появился вопрос, касающийся потоков. Есть класс, в котором имеются функции для вывода внутренних данных в поток. Всё работает, но функция вывода является дружественной и возвращает поток вывода, чтобы обеспечить каскадные вызовы. Тогда, если я правильно понимаю, эта функция становится глобальной и доступной пользователю класса. Как обеспечить каскадные вызовы и сокрытие одновременно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2015, 16:25     Потоки и сокрытие данных
Посмотрите здесь:

Инкапсуляция и сокрытие данных не одно и тоже? - C++
Вопрос:защита данных от несанкционированного доступа другими функциями называется?я ответил инкапсуляция,а в ответе сокрытие данных.Это не...

Для чего было придумано сокрытие данных в ООП? - C++
Кто может понятно объяснить это? Т.е. для чего мы объявляем поля класса как private , почему обычно не объявляют их как public ? для чего...

Потоки данных - C++
Все наверно знают, что стандартные потоки (cout, cin, cerr, clog) ввода и вывода можно перенаправлять в файлы. Зачем тогда нужны классы...

Потоки. Ввод данных. - C++
Если согласится на ввод второго человека, пропускается ввод его имени... вроде ввод все правильно, не знаю в чем беда :wall: ...

Тема потоки данных - C++
Задача: Создается файл путем ввода имени файла с клавиатуры, хочу с помощью функции get() и цикла do while ввести текст, который выведется...

COM порт, потоки, и таймер. Считывание данных - C++
всем привет, такая задача. Нужно считывать данные с ком порта, сразу после того как я открыл ком порт. начал с этой темы. ...

Что такое потоки ввода, потоки вывода? - C++
Здарова всем! Не так давно уже прогаю на С++ и все НИКАК не могу понять, что такое потоки ввода, потоки вывода..! вот допустим...

Сокрытие имен - C++
Доброго времени суток! Реально ли обратиться к x, который равен 7 из самого внутреннего блока? int x = 5; using namespace std; ...

Сокрытие методов при наследовании - C++
class A { public: void Draw(double){} }; class B : public A { public: void Draw(int){} };

Является ли консоль носителем данных, то есть файлом, если потоки выводят информацию именно в ней? - C++
Система ввода-вывода С++ основана на работе с потоками. Потоки в свою очередь являются абстрактными объектами с логическим интерфейсом и...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1788 / 1163 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
03.07.2015, 16:29     Потоки и сокрытие данных #2
Используйте гетеры.
senich
61 / 61 / 23
Регистрация: 22.11.2012
Сообщений: 242
Записей в блоге: 1
03.07.2015, 23:44  [ТС]     Потоки и сокрытие данных #3
В данном случае мне нужно не ограничить доступ пользователя к данным, а скрыть от него существование функции, которая, исходя из мой реализации, является глобальной.
hoggy
6368 / 2586 / 451
Регистрация: 15.11.2014
Сообщений: 5,714
Завершенные тесты: 1
04.07.2015, 03:20     Потоки и сокрытие данных #4
Цитата Сообщение от senich Посмотреть сообщение
Как обеспечить каскадные вызовы и сокрытие одновременно?
никак.

Цитата Сообщение от senich Посмотреть сообщение
скрыть от него существование функции
тогда вы не сможете выводить в поток.

это:
C++
1
std::cout << obj;
синтаксический сахар вызова функции:
C++
1
operator<<(std::cout, obj);
скроете её, и это перестанет работать.

обходные пути здесь - это для настоящих ценителей:


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
 
class example
{
    // --- можно сделать приватным
    // ограничив доступ к функции только избранным
    template<class T>
    ::std::basic_ostream<T>& 
    operator>>( ::std::basic_ostream<T>& os)const
    { 
        return os << "object of example: "<< v; 
    }
 
    
public:
    int v = 10;
    
    // например: только изнутри самого себя
    void aboutMe()const 
    { 
        // каскад, хе-хе
        *this>> (*this>> std::cout << std::endl); 
    }
};
 
int main()
{
    std::cout << "Hello, world!\n";
    
    example().aboutMe();
    
    // error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’
    //std::cout << example() <<std::endl;
}
ну или так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
 
class example
{
    struct wrapper
    {
        explicit wrapper(const example& e)
            : ref(e)
        {}
        
        const example& ref;
    };
    
    template<class T> friend
    ::std::basic_ostream<T>& 
    operator<<( ::std::basic_ostream<T>& os, const wrapper& w)
    { 
        return os << "object of example: "<< w.ref.v; 
    }
 
    
public:
    int v = 10;
    
    void aboutMe()const 
    { 
        wrapper w(*this);
        std::cout << w << std::endl<< w<< std::endl;  
    }
};
 
int main()
{
    std::cout << "Hello, world!\n";
    
    example e;
    
    e.aboutMe();
    
    // error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’
    // std::cout << e <<std::endl;
    
    // error: ‘struct example::wrapper’ is private
    // example::wrapper w(e);
    // std::cout << w <<std::endl;
}
а вообще, вы хотите что-то странное.
Yandex
Объявления
04.07.2015, 03:20     Потоки и сокрытие данных
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru