当文字通过成员函数传递给构造函数时,为什么值没有分配给类的成员?

时间:2016-01-26 19:15:07

标签: c++ class constructor member-functions function-call

我是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;。我在代码中没有发现任何错误。为什么会这样?

2 个答案:

答案 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
    // ...
}
相关问题