因此,我对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;
}
最佳答案
在此构造函数定义中
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);
关于c++ - C++:我没有得到正确的输出(菜鸟问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59041636/