Наследование интерфейсов С++? Помогите, пожалуйста, разобраться как правильно унаследовать интерфейс от другого класса к интерфейсу нового класса, чтоб новый интерфейс знал функции и родителя и потомка, но компилятор не выдавал бы ошибок "Нельзя вызвать конструктор абстрактного класса Server" или ошибок типа "У класса нет такого метода".
Пробовал создать некий новый интерфейс class IMainServer: public IServer, public ITcpSocket но тогда go() выдаёт ошибки о невозможности конвертации Server к нему.#include
#include
using namespace std;
/* Interfaces */
class ITcpSocket
{
public:
virtual void start(void) = 0;
};
class IServer: public ITcpSocket
{
public:
virtual void load(void) = 0;
};
/* Classes */
class TcpSocket: public ITcpSocket
{
public:
void start(void)
{
cout server)
{
server->start();
server->load();
}
int main()
{
auto server = make_shared();
go(server);
return 0;
}

21 Авг 2019 в 07:05
266 +1
0
Ответы
1

Проблема в вашем коде заключается в том, что вы пытаетесь унаследовать класс Server как от интерфейса IServer, так и от класса TcpSocket, который уже содержит реализацию метода start.

Чтобы избежать ошибок компиляции, можно унаследовать класс Server только от интерфейса IServer, а саму реализацию метода start переместить в другой класс, например, TcpServer. Вот пример исправленного кода:

#include <memory>
#include <iostream>
using namespace std;
/* Interfaces */
class ITcpSocket
{
public:
virtual void start(void) = 0;
};
class IServer: public ITcpSocket
{
public:
virtual void load(void) = 0;
};
/* Classes */
class TcpSocket: public ITcpSocket
{
public:
void start(void)
{
cout << "start" << endl;
}
};
class TcpServer: public IServer
{
public:
void start(void)
{
cout << "start" << endl;
}
void load(void)
{
cout << "load" << endl;
}
};
void go(shared_ptr<IServer> server)
{
server->start();
server->load();
}
int main()
{
auto server = make_shared<TcpServer>();
go(server);
return 0;
}

Теперь класс Server унаследован только от интерфейса IServer, и метод start реализован в классе TcpServer. Ошибки компиляции быть не должно, и программа должна успешно скомпилироваться и запуститься.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 96 157 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир