如何在C++里面写一个动态异构集合,而不使用STL?

问题描述 投票:0回答:1

基本上我必须在一个异源集合中动态存储不同的电影,我已经有了不同的电影类型(纪录片和家庭)和 "掩盖 "差异的类(电影),所以它可以存储在一个地方(记录).我的addMovie(Movie *mov)函数有问题。我不知道如何开始。

我的Record类。

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();}
};

电影类:

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++ class dynamic-arrays heterogeneous-array
1个回答
0
投票

没有那么明确的要求,但对于在一个容器中存储异构数据,我建议使用std::元组(https:/en.cppreference.comwcpputilitytuple。). 如果这是你要找的东西,请告诉我;)

编辑:没有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;
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.