Добытчики и сеттеры 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);
Другой вариант - не возвращать результат как возвращаемое значение. Вместо:
...
void getX( float& result) const {
result = static_cast<float>(x);
}
void getX( int& result) const {
result = x;
}
...
Просто добавив в список опций, не сказав, что это лучшее решение.