Создание шаблона класса ISet и Set - PullRequest
0 голосов
/ 17 марта 2020

Я предполагаю построить шаблонный класс, который называется 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 сейчас, когда этот класс является абстрактным? Я что-то недопонимаю?

...