簡體   English   中英

C++ 有輸入到類

[英]C++ having input to class

我做了 2 個函數:getdata,在person類中打印輸入/打印變量

    #include <iostream>
    #include <string>

    using namespace std;

    class person {
          public:
               char name[19];
               int born_year, married_year;
    };

    void getdata(char* name, int born_year,int married_year) {
         cout << "Enter Name!\n > ";
         cin.getline(name, 19);                         
         cout << "What's the Born Year?\n > ";
         cin >> born_year;
         cout << "What's the Married Year?\n > ";
         cin >> married_year;
    }

    void print(char* name, int born_year, int married_year) {
         cout << "Your Name : " << *name;
         cout << "\n Your Born Year : " << born_year;
         cout << "\n Your Married Year : " << married_year;
    }


    int main(void) {
        person p;
        int born_year, married_year;
        getdata(p.name, p.born_year, married_year);
        print(p.name, p.born_year, p.married_year);
        return 0;
    }

我正在嘗試在課外的函數中輸入

(類只有關於人的變量)

並用其他功能打印。 我怎么能讓這個工作?

一切看起來都很好。 只是您需要調用“引用函數”來直接更改類變量的值。 https://www.tutorialspoint.com/cplusplus/cpp_function_call_by_reference.htm

void getdata(char* name, int born_year,int married_year)

您可以刪除在 main 函數中聲明的變量並使用 p。 在每個參數之前。

getdata(p.name, p.born_year, p.married_year);

您的問題在於getdata函數的變量類型。 整數參數需要通過引用傳遞(指針或引用,后者是首選)。 現在,您傳入了born_yearmarried_year值的副本 當您獲得輸入時,將其保存到局部變量中; 傳遞的參數永遠不會更新。

你想要這樣的東西:

void getdata(char* name, int &born_year,int &married_year)

有了這個微小的變化(添加兩個&字符),您的代碼應該可以按預期工作。

如果您希望在函數內更改傳遞的變量,則需要通過引用傳遞它們。 為此,您需要對函數定義進行一些更改:

void getdata(char* &name, int &born_year, int &married_year) {
   //things you function does
}
#include <iostream>
#include <string>

using namespace std;

class person {
public:
    char name[19];
    int born_year, married_year;
};

void getdata(char* name, int &born_year, int &married_year) {
    cout << "Enter Name!\n > ";
    cin.getline(name, 19);
    cout << "What's the Born Year?\n > ";
    cin >> born_year;
    cout << "What's the Married Year?\n > ";
    cin >> married_year;
}

void print(char* name, int born_year, int married_year) {
    cout << "Your Name : " << name;
    cout << "\n Your Born Year : " << born_year;
    cout << "\n Your Married Year : " << married_year;
}


int main(void) {
    person p;
    getdata(p.name, p.born_year, p.married_year);
    print(p.name, p.born_year, p.married_year);
    return 0;
}

正如其他人提到的,您的問題是您傳遞的是值的副本,而不是變量本身。 您還忘記在主循環中將“p”放在“married_year”上。

然而,不是通過引用傳遞單獨的值,一個更好的想法是傳遞對整個人的引用:

int main(void) {
    person p;
    getdata(p);
    print(p);
    return 0;
}

Getdata 和 print 將如下所示:

void getdata(person &p) {
    cout << "Enter Name!\n > ";
    cin.getline(p.name, 19);                          
    cout << "What's the Born Year?\n > ";
    cin >> p.born_year;
    cout << "What's the Married Year?\n > ";
    cin >> p.married_year;
}

void print(const person &p) {
    cout << "Your Name : " << *(p.name);
    cout << "\n Your Born Year : " << p.born_year;
    cout << "\n Your Married Year : " << p.married_year;
}

這是一種更簡潔的方法,而且由於您沒有創建或傳遞盡可能多的變量,因此在這里犯錯的方法更少。 但是,如果將字段設為私有,則需要使類的兩個函數成為“朋友”以訪問其成員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM