Getters 和 Setters C++

Getters And Setters C++

好的,伙计们,我的问题很简单。我想为不同的值类型构造一个 getter 和 setter。基本上是函数重载,但有 getter 和 setters..我这样试过

#include <iostream>;

class Vectors {
public:
    Vectors() {};
    Vectors(int a, int b) {
        x = a, y = b;
    }
    int getX() {
        return x;
    }
    int getY() {
        return y;
    }
    float getX() {
        return (float)x;
    }
    float getY() {
        return (float) y;
    }
     friend Vectors operator+(const Vectors& v1, const Vectors& v2);
     friend Vectors operator/(const Vectors& v1, const Vectors& v2);
protected:
    int x, y;
private:

};

Vectors operator+(const Vectors& v1, const Vectors& v2) {
    Vectors brandNew;
    brandNew.x = v1.x + v2.x;
    brandNew.y = v1.y + v2.y;
    return (brandNew);
};

Vectors operator/(const Vectors& v1, const Vectors& v2) {
    Vectors brandNew(v1.x / v2.x, v1.y/v2.y);
    return brandNew;
}

int main() {
    Vectors v1(2, 3);
    Vectors v2(4, 5);
    Vectors v3;
    v3 = v1 + v2;
    Vectors v4 = v1 / v2;

    std::cout << "VECTOR 4 X : " << v4.getX() << std::endl;
    std::cout << "VECTOR 4 Y : " << v4.getY() << std::endl;

    std::cout << "Vector V3 X : " << v3.getX() << std::endl;
    std::cout << "VECTOR V3 Y : " << v3.getX() << std::endl;
}

但显然它说不能做函数重载,唯一的类型不同是 return 类型..

您不能重载基于 return 类型的方法。

您可以在其输入参数上重载函数。

例如:

void fun1(int a,char b);
void fun1(float a,char b);
void fun1(float a,int a,char b);

http://www.tutorialspoint.com/cplusplus/cpp_overloading.htm

据我所知,如果不更改参数就无法重载函数。您需要更改函数名称(将其称为 getXFloat() 或其他名称)或仅在调用函数后进行转换,例如:

float the_x_value = static_cast<float>(vec.getX());

我会选择第二个选项。

您的另一个选择是不 return 结果作为 return 值。相反:

...
void getX( float& result) const {
    result = static_cast<float>(x);
}
void getX( int& result) const {
    result = x;
}
...

只是添加到选项列表中,并不是说这是最好的解决方案。

您当然没有使用足够的模板。模板解决了 C++ 中的问题。使用它们。爱心模板。

struct YeeTemplates {
    float F;
    template <typename T>
    T getF() { return F; }
} y;

float f = y.getF<float>();
int i = y.getF<int>();