Как я могу написать динамическую c гетерогенную коллекцию в C ++ без использования STL? - PullRequest
1 голос
/ 03 мая 2020

По сути, я должен динамически хранить разные фильмы в разнородной коллекции, у меня уже есть разные типы mov ie (документальный и семейный) и класс, который «маскирует» разницу (mov ie), чтобы ее можно было хранится в одном месте (запись). У меня проблемы с моей функцией addMov ie (Mov ie * mov). Я не знаю, как начать.

Мой класс записи:

class Record {
    String name;              
    size_t siz;                     
    Movie* movies;         
    Record(const Record&);
    Record& operator=(const Record&);
public:
    Record(String n): name(n), siz(0) {movies = new Movie[siz+1];}
    void addMovie (Movie *mov);
    void removeMovie (Movie *mov);
    void listMovies();
    void searchMovie (const char* title);
    void emptyRecord();
    void writeFile();
    void readFile();
    virtual ~Record() {emptyRecord();}
};

Mov ie класс:

class Movie {
protected:
    String name;        
    String release;     
    String genre;       
public:
    Movie(){}
    Movie(String n, String r, String g): name(n), release(r), genre(g) {}
    virtual void write() {}
    virtual ~Movie() {}
};

Документальный класс: (семейный класс аналогично, он хранит int age_restriction и функция записи записывает это)

class Documentary: public Movie {
    String description;
public:
    Documentary(String n, String r, String d = "Add description up to 50 characters!"): Movie(n,r,"Documentary"), description(d) {}
    String getDescription () const {return description;}                                                                    
    void setDescription (String newdescr);
    void write();                                                                                                                                           
    virtual ~Documentary(){}
};

(PS: если у вас есть хорошие источники для динамических c разнородных хранилищ, я весь слух)

1 Ответ

0 голосов
/ 03 мая 2020

Не очень четкие требования, но для хранения разнородных данных в одном контейнере я бы посоветовал std :: tuple (https://en.cppreference.com/w/cpp/utility/tuple). Дайте мне знать, если это то, что вы искали;)

РЕДАКТИРОВАТЬ : возможное решение без STL.

#include <iostream>
using namespace std;

class Base {

};

class A : public Base {

};

class B : public Base {

};

int main(){
    const size_t arraySize = 10;
    Base* array[arraySize];

    //allocate
    array[0] = new A();
    array[1] = new B();
//  ...some more stuff here

    //dispose
    for (Base* ptr : array) {
        if (ptr != nullptr) {
            delete ptr;
            ptr = nullptr;
        }
    }
}
...