我是 C 新手,最近我開始學習便便,我想創建一個類movies和一個類。
directors一個類movie應該有一個陣列,directors我想從控制臺填充該陣列。當我運行代碼時,它會顯示第一行和第二行并停止執行:
在此處輸入影像描述
這是我的代碼:
#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();
}
uj5u.com熱心網友回復:
更好的方法是使用std::vector如下所示。使用 a的優點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
}
我所做的一些修改是:
- 二手建構式初始化串列類
director - 添加了一個
displayDirector在類中呼叫的方法director - 添加了一個
displayMovei在類中呼叫的方法movie - 添加了一個名為
directorsastd::vector<director>in class的資料成員movie。 - 添加了類的構造
movie的是初始化資料成員directors。 - 洗掉了
film從類中命名的不必要的方法movie - 不使用
using namespace std;這是推薦的做法
上面程式的輸出可以在這里看到。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/397644.html
