在另一个 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
的 优点 是您不必担心手动内存管理(如显式使用 new
和 delete
)。 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
}
我所做的一些修改是:
- 在class
director
中使用了构造函数初始化列表
- 在 class
director
中添加了一个名为 displayDirector
的方法
- 在 class
movie
中添加了一个名为 displayMovei
的方法
- 添加了一个名为
directors
的数据成员,它是 class movie
中的 std::vector<director>
。
- 为 class 添加了一个构造函数
movie
初始化 数据成员 directors
.
- 从 class
movie
中删除了名为 film
的不必要的方法
- 未使用
using namespace std;
这是推荐做法
上面程序的输出可见here.
我是 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
的 优点 是您不必担心手动内存管理(如显式使用 new
和 delete
)。 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
}
我所做的一些修改是:
- 在class
director
中使用了构造函数初始化列表
- 在 class
director
中添加了一个名为 - 在 class
movie
中添加了一个名为 - 添加了一个名为
directors
的数据成员,它是 classmovie
中的std::vector<director>
。 - 为 class 添加了一个构造函数
movie
初始化 数据成员directors
. - 从 class
movie
中删除了名为 - 未使用
using namespace std;
这是推荐做法
displayDirector
的方法
displayMovei
的方法
film
的不必要的方法
上面程序的输出可见here.