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

时间:2019-11-25 23:34:42

标签: c++ constructor scope initialization ostream

因此,我对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;
}

3 个答案:

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