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

问题描述 投票:1回答:3

因此,我对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;
}
c++ constructor scope initialization ostream
3个回答
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
{
    //…
}

也在朋友运算符中,第二个参数也应具有限定符const

friend ostream& operator << (ostream &output, const Person &p);

0
投票

此代码:

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

是错误的,您正在为其分配变量。

尝试:

    Person(string p_name, int p_age){
        name = p_name;
        age = p_age;
    }

0
投票

问题就在这里

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

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

Person(string name, int age) {
  this->name=name;
  this->age=age;
}
© www.soinside.com 2019 - 2024. All rights reserved.