2016-04-21 228 views
0

玉家伙在这里,我的问题很简单..我想构建不同势值类型getter和setter ..基本上函数重载但getter和setter ..我试图像这样getter和setter C++

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

但显然它说不能做功能重载和唯一类型不同是返回类型。

+2

所以问题是?为什么不在你称之为吸气剂之后进行剧组? –

+0

问题是你怎么做它告诉我的论据必须是不同的... @BaummitAugen。以上代码有错误... – amanuel2

+0

你不能,根据你的最后一句话是显而易见的。想一想,如果你编写'v4.ge​​tX()',编译器应该怎么知道你想调用哪个getter?再次,只需要'int' getters并且输出它们的结果。 –

回答

3

有没有办法重载函数不改变,我所知道的参数。您需要调用函数等之后,要么改变函数名(称之为getXFloat()或东西)或者只是演员:

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

我会去的第二个选项。

+1

在C++中,我推荐使用static_cast 来代替C风格的转换。 – Rei

+0

你是对的 - 谢谢! – hacoo

0

您拥有的另一个选择是不返回结果作为返回值。相反:

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

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

4

当然,你没有使用足够的模板。模板可以解决C++中的问题。使用它们。爱模板。

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

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