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

Библиотеки раскрывают инкапсуляцию - 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 () перегруженная функция трех типов : int, double,long include <iostream> using namespace std; class unever{ public: int prompt(int i); double prompt(double d); long prompt(long l); http://www.cyberforum.ru/cpp-beginners/thread1792355.html
C++ Создать класс "кольцевой буфер"
Кольцевой буфер емкостью 1024 вещественных чисел. Доступ к элементам буфера – как к элементам очереди. Обязательны функции-члены класса для инициализации буфера, добавления и удаления элемента, определения количества свободного и занятого пространства в буфере. Описать класс и продемонстрировать его использование. • GetFreeSpace() возвращает свободное место • GetOccupiedSpace() возвращает...
Error C2679: бинарный "<<": не найден оператор C++
Кто-нибудь может объяснить, почему компилятор выдает ошибку? (строку с ошибкой смотрите в комментариях) error C2679: бинарный "<<" : не найден оператор, принимающий правый операнд типа std::string (или приемлемое преобразование отсутствует) #include "stdafx.h" #include <iostream> using namespace std; struct DATA{ int n, m;
C++ Создать однонаправленный линейный список и использовать его для решения задачи о заявках на авиабилеты http://www.cyberforum.ru/cpp-beginners/thread1792348.html
Создать шаблон класса «однонаправленный линейный список». Использовать его при решении следующей задачи: Составить программу, которая содержит динамическую информацию о заявках на авиабилеты. Каждая заявка содержит: • пункт назначения; • номер рейса; • фамилию и инициалы пассажира; • желаемую дату вылета. • Программа должна обеспечивать: • хранение всех заявок в виде списка; • добавление...
C++ Создание класса секундомера Создайте класс секундомера. Члены класса: переменные типа double для хранения начального и конечного значения времени. Обязательны функции- члены класса для инициализации секундомера (присваивает переменным нулевые значения), для запуска и остановки секундомера, для вывода на экран величины истекшего времени. • Конструктор присваивает нулевые значения переменным • Деструктор удаляет объект и... подробнее

Показать сообщение отдельно
Operok
139 / 137 / 40
Регистрация: 15.02.2015
Сообщений: 417
Завершенные тесты: 2
11.08.2016, 10:18     Библиотеки раскрывают инкапсуляцию
С помощью include guard некоторых заголовочных файлов можно от конечного пользователя скрывать некоторые методы класса в зависимости от используемых им библиотек/header'ов или вообще платформы:
C++
1
2
3
4
5
6
7
8
class MyWindow //некий кросплатформенный класс окошка
{
...
#ifdef _WINDEF_
    HWND GetNativeHandle() const;
#endif
...
}
Добавлено через 16 минут
Цитата Сообщение от Fasterbru Посмотреть сообщение
1)у меня есть интерфейс "человек"
2)я реализовал этот интерфейс
3)создал порождающий класс, который выдает объект (реализующий интерфейс "человек" из пк.2)
!!итог:я получаю от порождающего класса объект, реализующий интерфейс "человек" и не вижу его либы.
это задачу решает, но громоздко.
вопрос: как получить тот же результат, но компактнее?
Пораждающий класс - фабрика?
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
/*IHuman.cpp*/
class IHuman
{
public:
    virtual ~IHuman() = default;
    virtual void SomeMethod() = 0;
    //остальные виртуальные методы
protected:
    IHuman() = default;
};
 
/*Human.h*/
#include "IHuman.h"
 
class Human : public IHuman
{
public:
    Human(...);
    virtual ~Human();
    virtual void SomeMethod() override;
    //остальная реализация
};
 
/*Human.cpp*/
/*тут реализация class Human*/
 
/*HumanFactory.h*/
#include "IHuman.h"
#include <memory>
 
class HumanFactory
{
public:
    static std::unique_ptr<IHuman> MakeHuman(...);
...
};
 
/*HumanFactory.cpp*/
#include "HumanFactory.h"
#include "Human.h"
std::unique_ptr<IHuman> HumanFactory::MakeHuman(...)
{
   ...
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru