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);
据我所知,如果不更改参数就无法重载函数。您需要更改函数名称(将其称为 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>();
好的,伙计们,我的问题很简单。我想为不同的值类型构造一个 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);
据我所知,如果不更改参数就无法重载函数。您需要更改函数名称(将其称为 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>();