Добытчики и сеттеры C++

Хорошо, ребята, мой вопрос здесь прост... Я хочу построить геттер и сеттер для типа значения diffrent. В основном перегрузка функции, но с геттерами и сеттерами... я попробовал это так

#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;
}

Но, очевидно, он сказал, что не может перегрузить функцию, и единственный тип diffrent - это тип возврата.

4 ответа

Решение

Нет способа перегрузить функцию, не меняя аргументы, которые мне известны. Вам нужно либо изменить имя функции (назовите ее getXFloat() или что-то в этом роде), либо просто выполнить приведение после вызова функции, например:

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

Я бы пошел на второй вариант.

Конечно, вы не используете достаточно шаблонов. Шаблоны решают проблемы в C++. Используй их. Любовные шаблоны.

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

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

Вы не можете перегружать методы, основанные на типе возвращаемого значения.

Вы можете перегрузить функции на его входные параметры.

Например:

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

Другой вариант - не возвращать результат как возвращаемое значение. Вместо:

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

Просто добавив в список опций, не сказав, что это лучшее решение.

Другие вопросы по тегам