在另一个 class 中填充类型 class 的数组

fill an array of type class inside another class

我是 c++ 的新手,最近我开始学习 poo 我想创建一个 class movies 和一个 class。 directors a class movie 应该有一个 directors 数组,我想从控制台填充该数组。当我 运行 代码时,它会显示第一行和第二行并停止执行: enter image description here 这是我的代码:

#include<iostream>
#include<string>

using namespace std;

class directors{
   string name;
   string lastname;
       public:
           directors(){
               
           }
           directors(string a,string b){
               name=a;
               lastname=b;
           }
           void createdirector(){
                   cout<<"name of director:"<<endl;
                   cin>>name;
                   cout<<"last name:"<<endl;
                   cin>>lastname;
           }
       
           
};

class movie{
   string name;
   directors* director;
   public:
       film(){
           directors* director=new directors[20];
       };

       void creatmovie(){
           cout<<"name of movie"<<endl;
           cin>>name;
           director[0].createdirector();
       }   
};

int main(){ 
movie a; 
a.creatmovie(); 

}

更好的方法是使用 std::vector,如下所示。使用 std::vector 优点 是您不必担心手动内存管理(如显式使用 newdelete)。 vector 会处理它(内存管理)。您可以使用下面给出的示例作为参考。

#include<iostream>
#include<string>
#include <vector>


class director{
   std::string name;
   std::string lastname;
       public:
           director(){
               
           }
           //use constructor initializer list
           director(std::string a,std::string b): name(a), lastname(b){
               
           }
           
           void createDirector() 
           {
                   std::cout<<"Enter name of director:"<<std::endl;
                   std::cin>>name;
                   std::cout<<"Enter last name:"<<std::endl;
                   std::cin>>lastname;
           }
           void displayDirector() const
           {
               std::cout << "Firstname: "<<name<<" Lastname: "<<lastname<<std::endl;
               
           }
       
           
};

class movie{
   std::string name;
   std::vector<director> directors; //vector of director objects
   public:
       
       //constructor that creates vector directors of size vecSize 
       movie(size_t vecSize): directors(vecSize)
       {
           std::cout << "Enter name of movie: "<<std::endl;
           std::cin >> name;
           
           //iterate through the vector and call method createDirector on each element 
           for(director &elem: directors)
           {
               elem.createDirector();
           }
       }
       
       void displayMovie()
       {
           std::cout<<"Movie's name is: "<<name<<std::endl;
           //iterate through the vector and call displayDirector on each object 
           for(const director& elem: directors)
           {
               elem.displayDirector();
           }
           
       }
};

int main(){ 
    movie a(4); //create an object of type movie. Note i have passed 4 as argument you can pass other numbers like 3,2 etc
    a.displayMovie();//display movie info

}

我所做的一些修改是:

  1. 在classdirector
  2. 中使用了构造函数初始化列表
  3. 在 class director
  4. 中添加了一个名为 displayDirector 的方法
  5. 在 class movie
  6. 中添加了一个名为 displayMovei 的方法
  7. 添加了一个名为 directors 的数据成员,它是 class movie 中的 std::vector<director>
  8. 为 class 添加了一个构造函数 movie 初始化 数据成员 directors.
  9. 从 class movie
  10. 中删除了名为 film 的不必要的方法
  11. 未使用 using namespace std; 这是推荐做法

上面程序的输出可见here.