我正在学习OOP的概念,我制作了一个简单的程序来读取学生的名字并将它们存储在对象的矢量中;创建了班级学生
class student{
public:
student(string,int);
string getName() const{
return name;
}
int getAge() const{
return age;
}
private:
string name;
int age;
};
student::student(string name,int age){
name=name;
age=age;
}
在主要我读行
vector<student> myClass;
string var;
int index=0;
while(getline(cin,var)){
student newStudent(var,index);
myClass.push_back(newStudent);
}
for( int i = 0; i < 5; i++){
cout << myClass[i].getName() << endl;
}
return 0;
但是因为我想要打印名称,它只打印空白行,我尝试在while循环中初始化类后立即打印名称,它也打印空行。我对OOP很新,我在这里看不到任何问题,我忽略了什么?我的小程序中的错误在哪里?
答案 0 :(得分:2)
尝试写作
this->name = name;
和
this->age=age;
在构造函数
答案 1 :(得分:1)
构造函数中的参数掩盖了实际的成员变量。有多种方法可以解决这个问题:
重命名您的成员,例如m_name
通过this
指针访问您的会员,例如this->name = name
答案 2 :(得分:0)
具体问题在于:
student::student(string name,int age){
name=name;
age=age;
}
您希望编译器理解一个name
是成员变量而另一个name
是局部变量,但它无法知道这一点。试试这个:
student::student(string n_name,int n_age){
name=n_name;
age=n_age;
}
更普遍的问题是您在测试之前尝试将此功能连接到其他代码(循环迭代,读取文件)。您的第一个main
应该是这样的:
student S("Adam", 0);
cout << S.getName() << endl;
答案 3 :(得分:0)
student::student(string name,int age){
name=name;
age=age;
}
name
和age
是这里的参数,对吗?所以你要将参数分配给它们自己(什么都不做)并保持成员变量不变。
您可以更改名称,因此它们的名称不同:
student::student(string name2,int age2){
name=name2;
age=age2;
}
或使用this->
明确引用成员变量:
student::student(string name,int age){
this->name=name;
this->age=age;
}