枚举器c ++的setter和getter方法

时间:2017-03-26 00:45:01

标签: c++ enums setter getter

我有以下代码,我正在尝试为枚举器编写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;
      }

2 个答案:

答案 0 :(得分:1)

问题1:

enum weight{small, medium, large};

是类型的声明,而不是变量。在此之后,您可以创建可以设置和获取的weight类型的变量。随着

enum weight
{
    small, medium, large
};
weight mWeight;

您现在有一个班级成员mWeight,可以与getter和setter一起使用。

但它对你没有多大帮助。

问题2:

weightprivate,因此班级以外的任何人都无法看到并使用此类型,因此void setWeight(weight w);调用者无法将weight设为enum weight传入函数。

通过将public的定义移至公共区块,然后交换privateweight块的顺序轻松解决,以便所有人都可以看到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;
 }