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

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

最佳答案

在此构造函数定义中

    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/

相关文章:

mysql - 我必须在 Coldfusion 中限定查询输出的范围吗?

c++ - 在C++中,两次使用equals是什么意思?

javascript - 调用基类构造函数而无需手动提供参数

java - 使用私有(private)构造函数扩展类

arrays - 如何为采用单个数组参数的构造函数调用 New-Object?

JavaScript 闭包和变量作用域

c++ - std::cout 会影响计时器吗?

c++ - 二分查找函数的问题

c++ - 电子表格的 xml 格式