在一个类中如果我们使用成员函数和友元函数来重载+运算符它给出一个错误,即'operator +'的模糊重载如何解决
答案 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);
}