所以我对C++很陌生,我正在使用流和成员函数。我正在尝试获取包含我传递给我的类的值的输出,但我没有得到正确的值。相反,我得到的垃圾值如下:
( this is the name: , and this is the age: 3223232)
这是我的代码:
#include <iostream>
using namespace std;
class Person{
string name;
int age;
public:
ostream& print_on(ostream &o) {
return o << '( this is the name: ' << name << ', and this is the age: ' << age << ')';
}
Person(){
name="noname";
age=0;
}
Person(string name, int age){
name=name;
age=age;
}
void setName(string n) {
name=n;
}
string getName() {
return name;
}
void setAge(int a){
age=a;
}
int getAge(){
return age;
}
friend ostream& operator << (ostream &output,Person &p);
};
ostream& operator << (ostream &output, Person &p){
return p.print_on(output);
}
int main()
{
string name="Helen";
int age=24;
Person p(name,age);
cout<<p;
return 0;
}
在此构造函数定义中
Person(string name, int age){
name=name;
age=age;
}
这些参数隐藏具有相同名称的类的数据成员。
而是写例如
Person(string name, int age){
this->name=name;
this->age=age;
}
或
Person(string name, int age){
Person::name=name;
Person::age=age;
}
或者更好的方法是写
Person( const string &name, int age ) : name( name ), age( age )
{
}
支付您需要的帐户,包括标题<string>
#include <string>
此外,不更改类对象的成员函数应声明为常量函数。例如
ostream& print_on(ostream &o) const
{
//…
}
同样在友元运算符中,第二个参数也应该有限定符 const
friend ostream& operator << (ostream &output, const Person &p);
此代码:
Person(string name, int age){
name=name;
age=age;
}
是错误的,您正在将变量分配给它们。
尝试:
Person(string p_name, int p_age){
name = p_name;
age = p_age;
}
问题就在这里
Person(string name, int age){
name=name;
age=age;
}
您不是在设置类变量,而是在尝试设置与它们相等的参数。要设置人员的姓名和年龄,您必须使用this
关键字,如下所示:
Person(string name, int age) {
this->name=name;
this->age=age;
}