#define _CRT_SECURE_WARNINGS
#include
#include
using namespace std;//标准命名空间
class student {
public:
void setname(string Name) {
name = Name;
}
void setId(int id) {
id = id;
}
void print(){
cout <<"姓名:" << name <<"\n学号:" << id<private:
string name;
int id;
};
int main() {
student s1;
s1.setname("张三");
s1.setId(10);
s1.print();
system("pause");
return EXIT_SUCCESS;
}
在学生类中 调用print方法 输出id值为-858993460 这是什么问题
this->id = id;
你的代码中存在一个命名冲突:变量“id”和函数“setId”的名称相同。
为了避免这种情况,可以将函数“setId”中的“id”参数命名为“newId”等。
具体修改如下:
void setId(int newId) {
id = newId;
}
```c++
```
id = id;
自己赋值给自己呀
改为this.id=id
另,最好在构造函数里传2个参数赋值给属性,否则容易new完忘记给属性赋值,这不是好习惯
以后所有的赋值方法,建议都要加上 this 指针:
this->id = id;
不管是C++, Java等等,养成一个良好的习惯,可以避免犯这种容易忽略的错误
问题出在student类中的setId函数中的参数命名和成员变量命名相同,这造成了局部变量的覆盖。为了避免这个问题,可以使用"this"指针,将其作为成员变量的引用。
以下是修改后的代码:
#define _CRT_SECURE_WARNINGS
#include <iostream>
#include <string>
using namespace std;//标准命名空间
class student {
public:
void setname(string Name) {
name = Name;
}
void setId(int ID) {
id = ID;
}
void print(){
cout <<"姓名:" << name <<"\n学号:" << id<<endl;
}
private:
string name;
int id;
};
int main() {
student s1;
s1.setname("张三");
s1.setId(10);
s1.print();
system("pause");
return EXIT_SUCCESS;
}
在上面的代码中,我们使用了一个不同的参数名称"ID",而不是成员变量"id",这样就避免了变量名冲突的问题。
应该是this->id = id,两个id 重名了,修改如下
#include <iostream>
#include <string>
using namespace std;//标准命名空间
class student {
public:
void setname(string Name) {
name = Name;
}
void setId(int id) {
this->id = id;
}
void print(){
cout <<"姓名:" << name <<"\n学号:" << id<<endl;
}
private:
string name;
int id;
};
int main() {
student s1;
s1.setname("张三");
s1.setId(10);
s1.print();
return EXIT_SUCCESS;
}