Я предполагаю построить шаблонный класс, который называется ISet, который будет иметь динамический массив c, в котором предполагается хранить Set. Set - это другой класс, который собирается наследовать указанный интерфейс от ISet, который выглядит следующим образом:
template <typename T>
class ISet
{
public:
virtual bool insert(T element) = 0;
virtual bool remove(T element) = 0;
virtual int size() const = 0;
};
Не уверен, правильно ли я понимаю назначение, но это то, что я до сих пор придумал:
#pragma once
#include <string>
#include <iostream>
using namespace std;
template <typename T>
class ISet
{
private:
T *arr;
int cap;
int nrOfSet;
public:
ISet();
~ISet();
virtual bool insert(T element) = 0;
virtual bool remove(T element) = 0;
virtual int size() const = 0;
};
#include "ISet.h"
template<typename T>
ISet<T>::ISet()
{
this->cap = 10;
this->nrOfSet = 0;
this->arr = new T[this->cap];
for (int i = 0; i < cap; i++)
{
arr[i] = nullptr;
}
}
template<typename T>
ISet<T>::~ISet()
{
delete[] arr;
}
#pragma once
#include "ISet.h"
template <typename T>
class Set : public ISet<T>
{
public:
Set();
~Set();
bool insert(T element);
bool remove(T element);
int size()const;
private:
string name;
};
template<typename T>
Set<T>::Set() : ISet(arr, cap)
{
this->name = "test";
}
template<typename T>
Set<T>::~Set()
{
for (int i = 0; i < this->nrOfSet; i++)
{
delete this->arr[i];
}
}
template<typename T>
bool Set<T>::insert(T element)
{
bool inserted = false:
bool found = false;
for (int i = 0; i < this->nrOfSet; i++)
{
if (element == arr[i])
{
found = true;
i = nrOfElement;
}
}
if (found == false)
{
this->arr[this->nrOfSet++] = new Set();
inserted = true;
}
return inserted;
}
template<typename T>
bool Set<T>::remove(T element)
{
bool remove = false:
return remove;
}
template<typename T>
int Set<T>::size() const
{
return this->nrOfSet;
}
Итак, причина, по которой я не уверен, заключается в том, что я не знаю, как я могу создать экземпляр динамического распределения c сейчас, когда этот класс является абстрактным? Я что-то недопонимаю?