[英]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_year
和married_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.