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