2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 486
1

Интерфейс с иерархией. Что идет в заголовок, а что в cpp

09.04.2021, 16:30. Показов 1153. Ответов 4

Author24 — интернет-сервис помощи студентам
Добрый день,

Допустим есть следующая иерархия:
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
struct IBasicInterface
{
    virtual ~IBasicInterface() {}
    virtual void f() = 0;
};
 
struct IExtendedInterface : virtual IBasicInterface
{
    virtual ~IExtendedInterface() {}
    virtual void g() = 0;
};
 
// One possible implementation strategy
struct CBasicImpl : virtual IBasicInterface
{
    virtual ~CBasicImpl() {}
    virtual void f();
 
    std::vector<double> v;
};
 
struct CExtendedImpl : virtual IExtendedInterface, CBasicImpl
{
    virtual ~CExtendedImpl() {}
    virtual void g();
};
Помогите пожалуйста разобраться, что положить в .срр а что в заголовок.

Пример взят отсюда
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2021, 16:30
Ответы с готовыми решениями:

Поясните пожалуйста что означает двоеточие и то что идет после него
В 4 строчке после параметра в скобочках нету &quot;;&quot; или же тела функции, что не сходится с моим...

Что значит это условие? Немогу расчехлить на что тут идёт проверка!!!
НЕмогу понять на что идет проверка. if monthof(DateTimePicker1.date+33)&lt;9 then...

То что нормально идёт на 4.4.2, не идёт на lolipop
Приложение на пятом андройде, в отличие от 4.4.2, html файл отображается с вопросами вместо букв....

Что такое файл с расширением cpp?
Процмем.цпп ProcMem.cpp Что это? Добавлено через 18 минут Может кто объяснить половину вот...

4
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.04.2021, 16:32 2
Цитата Сообщение от Kerim_Geophysic Посмотреть сообщение
Что идет в заголовок, а что в cpp
в заголовок идет заголовок.
все остальное - в cpp
1
2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 486
09.04.2021, 16:47  [ТС] 3
hoggy, немного не то что я ожидал услышать)

Я сейчас думаю так делать:
заголовок IBasicInterface.h
C++
1
2
3
4
5
struct IBasicInterface
{
    virtual ~IBasicInterface() {}
    virtual void f() = 0;
};
заголовок IExtendedInterface.h
C++
1
2
3
4
5
6
7
#include "IBasicInterface.h"
 
struct IExtendedInterface : virtual IBasicInterface
{
    virtual ~IExtendedInterface() {}
    virtual void g() = 0;
};
заголовок CBasicImpl.h
C++
1
2
3
4
5
6
7
8
9
10
#include "IBasicInterface.h"
#include <vector>    // из за того что std::vector<double> v включен в заголовок, приходится подключать вектор, это нормально?
 
struct CBasicImpl : virtual IBasicInterface
{
    virtual ~CBasicImpl();
    virtual void f();
 
    std::vector<double> v;
};
реализация CBasicImpl.cpp
C++
1
2
3
4
5
6
#include "CBasicImpl.h"
 
CBasicImpl::~CBasicImpl() {}
void CBasicImpl::f() {
    v.push_back(12);
};
заголовок CExtendedImpl.h
C++
1
2
3
4
5
6
7
8
#include "IExtendedInterface.h"
#include "CBasicImpl.h"
 
struct CExtendedImpl : virtual IExtendedInterface, CBasicImpl
{
    virtual ~CExtendedImpl();
    virtual void g();
};
реализация CExtendedImpl.cpp
C++
1
2
3
4
5
6
#include "CExtendedImpl.h"
 
CBasicImpl::~CExtendedImpl() {}
void CBasicImpl::g() {
    v.push_back(77);
};
Если посмотрите, то в CBasicImpl.h как член структуры вист вектор. Получается в заголовок мне приходится включать вектор. Я думал, что интерфейсы хороши тем, что реализация скрыта, и все члены класса тоже скрыты в реализации. А здесь это нарушается. Что посоветуете?
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.04.2021, 18:56 4
Лучший ответ Сообщение было отмечено Kerim_Geophysic как решение

Решение

Цитата Сообщение от Kerim_Geophysic Посмотреть сообщение
Я сейчас думаю так делать:
норм.

Цитата Сообщение от Kerim_Geophysic Посмотреть сообщение
Если посмотрите, то в CBasicImpl.h как член структуры вист вектор. Получается в заголовок мне приходится включать вектор. Я думал, что интерфейсы хороши тем
CBasicImpl - не является интерфейсом.
это - просто базовый класс.


что такое "интерфейс" с точки зрения ооп?
это - абстрактный класс,
у которого все методы чисто-виртуальные (и, как правило - без реализаций),
и у него отсутствуют данные-члены.


в с++ ты можешь сделать такой "интерфейс".
а потом можешь взять, да и добавить ему данные-члены,
и вообще - всё что захочешь.

получится обычный базовый класс,
который называть "интерфейсом" уже язык не поворачивается.

Добавлено через 9 минут
Цитата Сообщение от Kerim_Geophysic Посмотреть сообщение
А здесь это нарушается. Что посоветуете?
забить, и не париццо.
1
2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 486
09.04.2021, 19:41  [ТС] 5
hoggy, понял, спасибо.

Я так понимаю с экспортом в DLL через функцию фабрику проблем не возникнет если использовать изложенный подход?
0
09.04.2021, 19:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2021, 19:41
Помогаю со студенческими работами здесь

Что-то идёт не так(
Вчера сгорела видюха Gtx 560ti, а у меня валялась без дела amd Radeon R7 265, я ее поставил , но...

Что то идёт не так
День добрый. Сегодня обратил внимание после загрузки пк, видео карта в простое нагружена на 23%...

Что это *.vi заголовок RSRC
Помогите pls. разобраться- есть проект из кучи файлов с расширением *.vi, внутри, что то вроде...

Что это? *.vi заголовок RSRC
Помогите pls. разобраться- есть проект из кучи файлов с расширением *.vi, внутри что вроде...

Заголовок, что страница не существует
есть такая ситуация странице передается переменая если ета переменая больше определеного значения...

Что не так? Accuracy_Uvx.cpp:32:30: error: void value not ignored as it ought to be
Что не так? Accuracy_Uvx.cpp:32:30: error: void value not ignored as it ought to be #include...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru