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;
}
所以我是 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;
}