Форум программистов, компьютерный форум, киберфорум
Наши страницы

Библиотеки раскрывают инкапсуляцию - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить класс "строка" http://www.cyberforum.ru/cpp-beginners/thread1792356.html
Определите класс "строка" с двумя член-данными: char *p и int len, где char*p- указатель на строку, а int len - длина строки. Напишите демонстрационную версию программы, которая создает 2 объекта...
C++ Создать функцию prompt и перегрузить её для параметра разного типа Создайте функцию prompt( ) для выдачи подсказки пользователю и ожидания ввода данного. Перегрузите функцию prompt( ) так, чтобы она осуществляла ввод данных типов int, double, long. • promt ()... http://www.cyberforum.ru/cpp-beginners/thread1792355.html
C++ Создать класс "кольцевой буфер"
Кольцевой буфер емкостью 1024 вещественных чисел. Доступ к элементам буфера – как к элементам очереди. Обязательны функции-члены класса для инициализации буфера, добавления и удаления элемента,...
Error C2679: бинарный "<<": не найден оператор C++
Кто-нибудь может объяснить, почему компилятор выдает ошибку? (строку с ошибкой смотрите в комментариях) error C2679: бинарный "<<" : не найден оператор, принимающий правый операнд типа std::string...
C++ Создать однонаправленный линейный список и использовать его для решения задачи о заявках на авиабилеты http://www.cyberforum.ru/cpp-beginners/thread1792348.html
Создать шаблон класса «однонаправленный линейный список». Использовать его при решении следующей задачи: Составить программу, которая содержит динамическую информацию о заявках на авиабилеты. Каждая...
C++ Создание класса секундомера Создайте класс секундомера. Члены класса: переменные типа double для хранения начального и конечного значения времени. Обязательны функции- члены класса для инициализации секундомера (присваивает... подробнее

Показать сообщение отдельно
Operok
162 / 160 / 44
Регистрация: 15.02.2015
Сообщений: 464
Завершенные тесты: 2
11.08.2016, 09:51
PIMPL
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
/*my_class.h*/
#include <memory>
 
namespace my
{
    namespace detail
    {
        class MyClassImpl;
    }
    class MyClass
    {
    public:
        MyClass();
        MyClass(MyClass&&);
        MyClass& operator=(MyClass&&);
        ~MyClass();
        //...
    private:
        MyClass(const MyClass&) = delete;
        MyClass& operator=(const MyClass) = delete;
        std::unique_ptr<MyClassImpl> pimpl;
    };
}
 
/*my_class.cpp*/
 
#include "my_class.h"
//инклюдим что хотим, в том числе и реализация класса my::detail::MyClassImpl
 
using namespace my;
 
MyClass::MyClass() : pimpl(std::make_unique<detail::MyClassImpl>())
{
}
MyClass::MyClass(MyClass&&) = default;
MyClass& MyClass::operator=(MyClass&&) = default;
MyClass::~MyClass() = default;
 
//остальная реализация
Добавлено через 5 минут
ps: если не нравится #include <memory>, то можно всё реализовать через сырые указатели на MyClassImpl, но к чему такие заморочки, тем более если в область видимости попадают заголовочные файлы стандартной библиотеки? Например, необходимо было использовать c++ либу для MySQL, а там в header файлах используются бустовские смарт поинтеры, ребята не заморачивались
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru