c ++:我没有得到正确的输出(菜鸟问题)

c++: I am not getting the right output (Noob Question)

所以我是 C++ 的新手,我正在处理流和成员函数。我试图获得一个输出,其中包含传递给我的 class 的值,但我没有获得正确的值。相反,我得到的垃圾值如下:

( 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;
    }

参数隐藏了class的同名数据成员。

改为写例如

    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 )
    {
    }

支付需要包含[=36​​=]<string>

#include <string>

另外,不改变class 的object 的成员函数应该声明为常量函数。例如

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;
}

您没有设置 class 变量,您试图将参数设置为等于它们自己。要设置此人的姓名和年龄,您必须使用 this 关键字,如下所示:

Person(string name, int age) {
  this->name=name;
  this->age=age;
}