运算符重载与朋友和成员函数

时间:2016-02-25 05:14:18

标签: c++ overloading operator-keyword

在一个类中如果我们使用成员函数和友元函数来重载+运算符它给出一个错误,即'operator +'的模糊重载如何解决

2 个答案:

答案 0 :(得分:1)

我建议将其作为非会员功能实施。这样,您可以使用其他组合重载该功能。例如,我们假设您有一个班级Point和另一个班级Vector(一个gometric矢量,而不是std::vector)。

你可以重载

Point operator+(Point const&, Vector const&);
Point operator+(Vector const&, Point const&);

如果将其实现为成员函数,则只在类中实现其中一个。要实现这两者,您必须将第一个实现为Point的成员函数,将第二个实现为Vector的成员函数。

答案 1 :(得分:0)

如果你真的想要,你可以拥有Foo a, b; a.operator+(b); //call member function operator+(a, b); //call non-member function 的成员和非成员超载。

operator+

它破坏了运算符的全部要点,因为你必须实际写出方法调用。

旁注:非会员Foo operator+ (Foo lhs, const Foo& rhs) { return lhs += rhs; } 不需要是朋友功能。它很容易写成:

 void setName(string b) {
        cout << "Please enter your name:" << endl;
        getline(cin, b);
        for (int i =0; i<b.size(); i++) {
            if  ((b[i] >= 'A' && b[i] <= 'Z') ||
                   (b[i] >= 'a' && b[i] <= 'z')) {
                cout << "Error" << endl;
                cout << "Please enter your name:" << endl;
                getline(cin, b);

            }