【发布时间】:2021-05-18 21:40:45
【问题描述】:
如何让用户使用重载的友元运算符将值分配给半径>>?我不知道为什么会收到此错误。只有当我在 Circle 构造函数中显式地为 r 赋值时,我才不会收到此错误。请让我觉得有意义:(
输出:
代码:
#include <iostream>
template <class T>
class Circle {
private:
T radius;
double area;
public:
Circle(T r){ //constructor
radius = r;
area = 3.14 * (radius*radius);
}
friend std::istream& operator>> (std::istream & input, Circle<T> circle1){ //friend function
input >> circle1.radius;
return input;
}
friend std::ostream& operator<< (std::ostream & output, const Circle<T> circle1){ //friend function
output << "\nRadius: "<< circle1.radius << "\nArea: "<< circle1.area;
return output;
}
void operator+ (T n) { //member function
radius += n;
}
};
int main()
{
Circle<int> circle2;
std::cin >> circle2;
std::cout << circle2;
return 0;
}
【问题讨论】:
-
嘿朋友...您必须添加一个空的构造函数才能工作... Circle(){ }....... ......... Circle
circle2 搜索一个空的构造函数...如果你有 Circle circle2(5) 它会工作,因为你有一个构造函数 -
你也错过了
Circle参数的reference。
标签: c++ class templates operator-overloading friend-function