Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
 Аватар для HenryDukart
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462

Класс, содержащий абстрактное поле

29.06.2016, 16:34. Показов 1199. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Хочу сделать так, чтобы класс содержал одним из своих полей интерфейс.

Как лучше реализовать, чтобы извне невозможно было изменить это поле?
То есть я хочу создать копию объекта, который передается в конструкторе и присвоить его адрес указателю на интерфейс.

Может предложите более хороший способ реализации. Шаблоны не использовать.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.06.2016, 16:34
Ответы с готовыми решениями:

Создать класс очередь Turn (содержащий числовое поле) и перегрузить для него операторы согласно условию
Помогите пожалуйста, а то я запутался очень сильно. ;c Создать класс очередь Turn (содержит числовое поле). Перегрузить операторы: ...

Определить класс химический элемент, содержащий информацию о названии элемента его химических свойствах. Определить класс медикаменты, содержащий разн
Определить класс химический элемент, содержащий информацию о названии элемента его химических свойствах. Определить класс медикаменты,...

Создать иерархию классов Шахматная фигура – абстрактный класс, содержащий поле – цвет. Создать производные классы
Создать иерархию классов Шахматная фигура – абстрактный класс, содержащий поле – цвет. Создать производные классы все фигуры, содержащие...

3
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
29.06.2016, 17:22
Оно Паттерн Strategy (стратегия)?
1
 Аватар для HenryDukart
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462
29.06.2016, 17:33  [ТС]
notAll, да, спасибо. Вы правильно меня поняли. У меня даже иерархия такая же.
Я зациклился на вопросе о передаче алгоритма. Нельзя ли его как-то скопировать, а не просто присвоить указателю?
0
19496 / 10101 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
29.06.2016, 18:36
Цитата Сообщение от HenryDukart Посмотреть сообщение
Нельзя ли его как-то скопировать, а не просто присвоить указателю?
Если я правильно понял твое желание, то поможет вот это: https://en.wikibooks.org/wiki/... onstructor
Кликните здесь для просмотра всего текста

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <iostream>
#include <memory>
 
class IBase
{
public:
    virtual void doSmth() = 0;
    
    virtual std::unique_ptr<IBase> clone() const = 0;
};
 
template <typename D>
class IBaseCloneable : public IBase
{
public:
    std::unique_ptr<IBase> clone() const
    {
        return std::make_unique<D>(static_cast<D const &>(*this));
    }
};
 
class Policy1 
    : public IBaseCloneable<Policy1>
{
public:
    void doSmth()
    {
        std::cout << "Hello, world!\n";    
    }
};
 
class Policy2
    : public IBaseCloneable<Policy2>
{
public:
    void doSmth()
    {
        std::cout << "Kill all humans!\n";    
    }
};
 
class Behaviour
{
public:
    explicit Behaviour(std::unique_ptr<IBase> const & x)
        : m_policy(x->clone()) // copy 
    { }
    
    void doSmth()
    {
        m_policy->doSmth();
    }
    
private:
    std::unique_ptr<IBase> m_policy;
};
 
int main()
{
    std::unique_ptr<IBase> p1(new Policy1());
    std::unique_ptr<IBase> p2(new Policy2());
    
    Behaviour b1(p1);
    
    b1.doSmth();
    
    Behaviour b2(p2);
 
    b2.doSmth();
}
http://rextester.com/QXSB91213
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.06.2016, 18:36
Помогаю со студенческими работами здесь

Создать класс с полями (поле 1, поле 2) и методами (конструктор, функция обработки полей)
Всем привет, нужно помощь, я самостоятельно изучаю программирование, наткнулся на лабораторную в интернете по теме &quot;Классы&quot;, до...

Объявить класс, содержащий поле целого типа две константы, задающие допустимый диапазон
задание такое :5. Объявить класс, содержащий поле целого типа две константы, задающие допустимый диапазон значения этого поля и свойства...

Класс: Дописать производный класс, дополняющий базовый и содержащий минимум 2 функции-члена...
Составьте программу на языке С#, которая должна содержать: 1) базовый класс в соответствии с вариантом; 2) производный класс,...

Создать класс колесо, имеющее радиус. Определить конструкторы. Создать класс машин, содержащий класс колесо
Создать класс колесо, имеющее радиус. Определить конструкторы. Создать класс машин, содержащий класс колесо. Дополнительно есть марка,...

Запрос, содержащий OLE - поле
У меня Acc в пустом поле OLE не пишет ничего, поэтому в запросе достаточно поставить условие поле OLE Is Not Null. Проверено в 97, 2000


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru