我是C ++的初学者。我正在研究建设者。我正在写一个简单的铁路车票预订计划。这是我的代码:
#include <iostream>
#include <stdlib.h>
using namespace std;
class Ticket
{
char* name;
long PNR;
Ticket(char *pname, long pnr):name(pname),PNR(pnr)
{
}
public:
Ticket()
{
name = NULL;
PNR=0;
}
void booking()
{
char *n;
n= new char[25];
cout << "Enter Your Name: ";
cin >> n;
Ticket(n,12345);
cout << "Your Ticket is Booked." << endl;
}
void status()
{
long num;
cout << "Enter PNR: ";
cin >> num;
if (num == PNR)
cout << "Ticket is confirmed" << endl;
else
cout << "Ticket is not confirmed" << endl;
}
void print()
{
cout << "Your PNR is " << PNR << endl;
cout << "The PNR is alloted to " << name << endl;
}
};
using namespace std;
int main()
{
int option;
Ticket pass1;
book:
cout << "Select an option: " << endl;
cout << "1. Booking\t2. Status\t3.Print Info" << endl;
cin >> option;
switch(option)
{
case 1:
pass1.booking();
break;
case 2:
pass1.status();
break;
case 3:
pass1.print();
break;
default:
cout << "Invalid Entry. Exiting" << endl;
break;
}
cout << "Do you want to check another ticket?" << endl;
cout <<"1. Yes\t2. No" << endl;
cin >> option;
switch(option)
{
case 1:
goto book;
break;
case 2:
default:
cout << "Exiting" << endl;
exit(0);
}
return 0;
}
在成员函数booking()
中,我调用构造函数并传递n和12345.但是,传递给构造函数的n被保存到成员变量&#34; name&#34;但是12345没有保存到成员变量&#34; PNR&#34;。我在代码中没有发现任何错误。为什么会这样?
答案 0 :(得分:2)
// A job to send a tweet
public class PostTweetJob extends Job {
@Inject MyService webservice;
public static final int PRIORITY = 1;
private String text;
public PostTweetJob(String text) {
// This job requires network connectivity,
// and should be persisted in case the application exits before job is completed.
super(new Params(PRIORITY).requireNetwork().persist());
}
@Override
public void onAdded() {
// Job has been saved to disk.
}
@Override
public void onRun() throws Throwable {
// Job logic goes here
webservice.postTweet(text);
}
@Override
protected void onCancel() {
// Clean up
}
}
正在创建一个临时Ticket(n,12345);
,然后将其丢弃。它不会为当前Ticket
设置成员变量。设置变量Ticket
应该看起来像
booking()
我建议您使用std::string而不是char数组,因为您需要记住在析构函数中删除数组,并且需要实现复制构造函数和赋值运算符。如果您使用void booking()
{
name = new int[25]
cout << "Enter Your Name: ";
cin >> name;
PNR = 12345;
cout << "Your Ticket is Booked." << endl;
}
,那么所有默认值都适合您。
答案 1 :(得分:1)
Ticket(n,12345);
不会重新调用当前元素的构造函数,它会创建一个用Ticket
初始化的临时(n,12345)
并立即丢弃它。
通常,您只能构造一次对象。构造完成后,您无法再次为该对象调用构造函数。
相反,您只需使用其名称分配给您的成员变量:
void booking() {
PNR = 42; // This will change the member PNR of the current instance
// ...
}