我有以下代码,我正在尝试为枚举器编写getter和setter方法。有人可以请更正我的代码,因为经过多次尝试我仍然会收到错误。感谢您的帮助!
///in the header file
class Car{
private:
enum weight{small, medium, large};
public:
Car();
int getWeight() const;
void setWeight(weight w);
};
////// in the car.cpp file
//default constructor
Car::Car(){
weight =small;
}
weight Car::getWeight() const{
return weight;
}
void Car::setWeight(weight w){
weight = w;
}
答案 0 :(得分:1)
问题1:
enum weight{small, medium, large};
是类型的声明,而不是变量。在此之后,您可以创建可以设置和获取的weight
类型的变量。随着
enum weight
{
small, medium, large
};
weight mWeight;
您现在有一个班级成员mWeight
,可以与getter和setter一起使用。
但它对你没有多大帮助。
问题2:
weight
是private
,因此班级以外的任何人都无法看到并使用此类型,因此void setWeight(weight w);
调用者无法将weight
设为enum weight
传入函数。
通过将public
的定义移至公共区块,然后交换private
和weight
块的顺序轻松解决,以便所有人都可以看到class Car
{
public:
enum weight
{
small, medium, large
};
Car();
int getWeight() const;
void setWeight(weight w);
private:
weight mWeight;
};
需要它的班级。
int getWeight() const;
问题3:
之间存在不匹配
weight Car::getWeight() const
和
class Car
{
public:
enum weight
{
small, medium, large
};
Car();
weight getWeight() const;
void setWeight(weight w);
private:
weight mWeight;
};
似乎正确的版本会返回重量,所以
weight
问题4:
没有Car::weight
之类的东西。只有Zuul。抱歉。只有Car
,所以在编译器知道函数是weight Car::getWeight() const{
return weight;
}
的一部分之前,你需要明确。
Car::weight Car::getWeight() const{
return weight;
}
需要成为
public
旁注:如果你有没有限制的setter和getter,你也可以创建变量private
。制作成员变量void setImportantNumber(int val)
{
importantNumber = val;
}
的全部意义在于保护对象的状态。如果任何局外人都可以在没有对象意识到的情况下随意更改变量,那么最终难以追踪错误。
在如上所述的微不足道的情况下,这并不是那么重要,但如果你有一个带有计数器的课程,并且当该计数器达到42时会发生重要的事情。然后一些小丑出现并使用这个setter
void setImportantNumber(int val)
{
if (val) < 42)
{
importantNumber = val;
}
else if (val == 42)
{
importantNumber = 0;
doSomethingImportant();
}
else
{
cerr << "I'm afraid I can't let you do that, Dave.\n"
}
}
将值设置为43?封装没有做任何好事,因为setter违反了封装。
另一方面
matrix = [[1,1,1],[1,2,2],[1,0,0]]
answer = str([sum(row) for row in matrix])
print answer
防止了一些愚蠢。
答案 1 :(得分:0)
根据上面发布的信息,我更改了如下所示的代码并且有效。谢谢!
//Car.h:
enum weight
{
small, medium, large
};
class Car{
private:
weight mWeight;
public:
Car();
weight getWeight() const;
};
//Car.cpp file
Car::Car(){
mWeight = large;
}
weight Car::getWeight() const{
return mWeight;
}