如何在不使用STL的情况下在C++中编写动态异构集合



基本上,我必须将不同的电影动态存储在一个异构的集合中,我已经有了不同的电影类型(纪录片和家庭(和"掩盖"差异的类(电影(,以便将其存储在一处(记录(。我的addMovie(Movie*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();}
};

电影类:

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

Documentary类:(family类类似,它存储一个int age_restriction,write函数写入(

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

(附言:如果你有任何关于动态异构商店的好消息来源,我洗耳恭听(

虽然没有明确的要求,但对于将异构数据存储在一个容器中,我建议使用std::tuple(https://en.cppreference.com/w/cpp/utility/tuple)。如果这是你想要的,请告诉我;(

EDIT:没有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;
}
}
}

最新更新