C++ 如何在C++;没有使用STL?

C++ 如何在C++;没有使用STL?,c++,class,dynamic-arrays,heterogeneous-array,C++,Class,Dynamic Arrays,Heterogeneous Array,基本上,我必须在一个异构的集合中动态存储不同的电影,我已经有了不同的电影类型(纪录片和家庭)和“掩盖”差异的类(电影),所以它可以存储在一个地方(记录)。 我的addMovie(Movie*mov)功能有问题。我不知道怎么开始 我的唱片班: class Record { String name; size_t siz; Movie* movies; Record(const R

基本上,我必须在一个异构的集合中动态存储不同的电影,我已经有了不同的电影类型(纪录片和家庭)和“掩盖”差异的类(电影),所以它可以存储在一个地方(记录)。 我的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() {}
};
documental类:(family类类似,它存储int age_限制,write函数写入该限制)


(注:如果您有任何关于动态异构存储的好来源,我洗耳恭听)

要求不太明确,但对于在单个容器中存储异构数据,我建议使用std::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;
        }
    }
}
#包括
使用名称空间std;
阶级基础{
};
A类:公共基地{
};
B类:公共基地{
};
int main(){
const size\u t arraySize=10;
基*数组[阵列化];
//分配
数组[0]=新的A();
数组[1]=新的B();
//……这里还有一些东西
//处置
用于(基本*ptr:阵列){
如果(ptr!=nullptr){
删除ptr;
ptr=nullptr;
}
}
}

要求不是很明确,但对于在单个容器中存储异构数据,我建议使用std::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;
        }
    }
}
#包括
使用名称空间std;
阶级基础{
};
A类:公共基地{
};
B类:公共基地{
};
int main(){
const size\u t arraySize=10;
基*数组[阵列化];
//分配
数组[0]=新的A();
数组[1]=新的B();
//……这里还有一些东西
//处置
用于(基本*ptr:阵列){
如果(ptr!=nullptr){
删除ptr;
ptr=nullptr;
}
}
}

我需要在不使用任何STL的情况下编写它:/。基本上,我的record类应该动态存储电影,而电影可以是不同的类型(我的示例是Documental类)。我的addMovie函数获取一个指向电影的指针,然后将其添加到记录中。哦,对不起,我错过了编辑!尽管问题是我需要在添加新内容时增加容器的大小。我需要增加容器的大小--创建您自己的向量类。既然你不能使用STL,那么你就有责任创建你本来可以使用的任何类。如果你是学生,你的任务是模仿STL vector类的功能,那么你有3个选项:1。(最简单的解决方案)复制粘贴实际的vector实现:D 2。在插入和3时实现阵列重新分配。实现链表实现。在任何一种情况下,你都有可能得到一个糟糕的分数,因为你的老师肯定会指出,在速度/记忆方面总是有一个权衡。是的,还有第四个选项,您可以尝试deque实现,这是一种链表和向量的混合,两者都有优点和缺点。祝你好运我需要在不使用任何STL:/的情况下编写它。基本上,我的record类应该动态存储电影,而电影可以是不同的类型(我的示例是Documental类)。我的addMovie函数获取一个指向电影的指针,然后将其添加到记录中。哦,对不起,我错过了编辑!尽管问题是我需要在添加新内容时增加容器的大小。我需要增加容器的大小--创建您自己的向量类。既然你不能使用STL,那么你就有责任创建你本来可以使用的任何类。如果你是学生,你的任务是模仿STL vector类的功能,那么你有3个选项:1。(最简单的解决方案)复制粘贴实际的vector实现:D 2。在插入和3时实现阵列重新分配。实现链表实现。在任何一种情况下,你都有可能得到一个糟糕的分数,因为你的老师肯定会指出,在速度/记忆方面总是有一个权衡。是的,还有第四个选项,您可以尝试deque实现,这是一种链表和向量的混合,两者都有优点和缺点。祝你好运不使用std/STL作为需求,主要是因为如何实现(简单的)std类等效。您已经对
字符串执行了操作。似乎您还需要
std::vector
,可能还需要类似的智能指针。不使用std/STL作为需求,主要是因为如何实现(简单的)等价的std类。您已经对
字符串执行了操作。您似乎还需要
std::vector
,可能还需要智能指针。