因此,我对C ++非常陌生,并且正在研究流和成员函数。我正在尝试将im值传递给我的类,但我没有获得正确的值。.相反,我得到了像
这样的垃圾值( 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;
}
答案 0 :(得分:1)
在此构造函数定义中
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
{
//…
}
在Friend运算符中,第二个参数也应具有限定符const
friend ostream& operator << (ostream &output, const Person &p);
答案 1 :(得分:0)
此代码:
Person(string name, int age){
name=name;
age=age;
}
是错误的,您正在为自己分配变量。
尝试:
Person(string p_name, int p_age){
name = p_name;
age = p_age;
}
答案 2 :(得分:0)
问题就在这里
Person(string name, int age){
name=name;
age=age;
}
您没有设置类变量,而是试图将参数设置为等于它们自己。要设置此人的姓名和年龄,您必须使用this
关键字,如下所示:
Person(string name, int age) {
this->name=name;
this->age=age;
}