【发布时间】:2018-10-16 14:12:57
【问题描述】:
我正在对类和构造函数进行试验,我正在尝试根据 if 语句之类的内容为类对象选择特定的声明。我写了一个简单的例子,展示了我试图做的事情,但这是行不通的。即使它满足 if 语句,它也会打印第一个声明对象的“id”,如果我没有在 if 语句之前声明它,我会得到错误“a not declared in this scope”的打印。有没有办法重新声明一个类对象,然后通过 if 语句使用它?
class potato{
private:
int id;
public:
void get_id(){
cout<<id<<endl;
}
potato(int x){
id=x;
}
};
int main(){
int i=9;
potato a(i);
if(i==3){
potato a(5);
}
else
potato a(3);
a.get_id();
}
【问题讨论】:
-
你似乎对C++有不少误解。你应该退后一步,从一本好书中系统地学习语言。
-
^ 同意。在这种特定情况下,您不必重新初始化
a来更改id类成员的值。你可以创建一个像void set_id(int _id) { id = _id }这样的类函数并在你的 if-else 范围内调用它。 -
@BaummitAugen 评论最好用link to SO list of good C++ books 扩充。
-
您需要了解声明某事物(告诉编译器它存在)和定义该事物(告诉编译器它实际上是如何制造)之间的区别,以及区别在一个类和该类的一个实例(称为“对象”)之间。这就是这个问题的标题。
-
理解这些细节很重要,一旦你理解了这些,你就可以很好地理解你的程序出了什么问题。
标签: c++ class constructor redeclaration