C ++ Объединение наследования классов и шаблонов - PullRequest
0 голосов
/ 26 марта 2020

У меня есть задание, которое включает наследование и шаблоны. Я должен создать программу проигрывателя musi c и создать несколько классов, которые наследуют функции связанного списка.

Я получаю отказ от наследования шаблона класса от класса. это необходимо, чтобы не имел шаблона .

Это то, что я имею до сих пор. Это класс, который наследуется:

#ifndef LINKED_LIST_
#define LINKED_LIST_

#include <memory>

#include "ListInterface.h"
#include "Node.h"

template <typename ItemType>
class LinkedList : public ListInterface<ItemType> {

// ...

Это класс, который будет брать функции из базового класса:

#ifndef DISC_
#define DISC_

#include <memory>
#include "LinkedList.h"

class Disc : public LinkedList {

// ...

Я понимаю, что мне нужно передать шаблон через объявление LinkedList для второго блока кода. Однако я не уверен, как это сделать. Я попробовал кое-что:

template <typename ItemType>
class Disc : public LinkedList<ItemType> {

// ...

Но объявит ли это класс Dis c как шаблон? Это то, что сказал мне мой инструктор. Спасибо.

1 Ответ

0 голосов
/ 26 марта 2020

Но объявит ли это класс Dis c как шаблон?

Да. Если вы хотите иметь тип (не шаблон), от которого вы можете наследовать, вам нужно создать экземпляр LinkedList. Например, вы можете иметь LinkedList из Disc с, равное LinkedList<Disc>. И Disc может быть объявлено как

class Disc : public LinkedList<Disc> {};

Обратите внимание, что LinkedList<Disc> не является шаблоном. Этот тип похож на другие, следовательно, Disc не обязательно должен быть шаблоном. Я должен был сделать некоторые предположения, чтобы выбрать параметр шаблона. Я не думаю, что Disc наследование от LinkedList<Disc> - это звуковой дизайн. Однако это еще одна возможность, которая была бы не менее странной:

class Disc : public LinkedList<int> {};

Суть в том, чтобы просто понять, что LinkedList<int> не шаблон, как, например, std::vector<int> не шаблон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...