认证0级讲师
一般不会(a + b).area(); 这样调用,用起来不自然。而是会实现类似下面的一个重载函数
friend ostream &operator<<(ostream &os, const Triangle &b) { float s, area; s = (b.x + b.y + b.z) / 2; area = sqrt(s * (s - b.x) * (s - b.y) * (s - b.z)); // cout << "area is " << area << endl; os << "area is " << area <<endl; return os; }
这样,打印的时候只要 cout << a + b << endl;即可 代码稍微改了下,具体的算法没看,
#include <iostream> #include <math.h> using namespace std; class Triangle { private: int x, y, z; public: Triangle() { } void area() { float s, area; s = (x + y + z) / 2; area = sqrt(s * (s - x) * (s - y) * (s - z)); cout << "area is " << area << endl; } friend ostream &operator<<(ostream &os, const Triangle &b) { float s, area; s = (b.x + b.y + b.z) / 2; area = sqrt(s * (s - b.x) * (s - b.y) * (s - b.z)); // cout << "area is " << area << endl; os << "area is " << area <<endl; return os; } friend Triangle operator+(Triangle left, Triangle right) { Triangle b; b.x = left.x + right.x; b.y = left.y + right.y; b.z = left.z + right.z; return b; } void input() { cin >> x >> y >> z; } void output() { cout << "triangle three horizon length is " << x << " " << y << " " << z << endl; } }; int main() { Triangle a, b, c; a.input(); b.input(); c.input(); (a + b).output(); // (a + b).area(); cout << a + b + c <<endl; return 0; }
PS:我更新了下,这里其实没必要用友元函数,直接如下用就行
Triangle operator+(Triangle other){
Triangle ret; ret.x = this->x + other.x; ret.y = this->y + other.y; ret.z = this->z + other.z; return ret;
}
你用friend来处理的话,返回值也是一个Triangle,可以递归的再去加另外一个Triangle,就实现多个Triangle连加的形式
一般不会(a + b).area(); 这样调用,用起来不自然。
而是会实现类似下面的一个重载函数
这样,打印的时候只要 cout << a + b << endl;即可
代码稍微改了下,具体的算法没看,
PS:
我更新了下,这里其实没必要用友元函数,直接如下用就行
Triangle operator+(Triangle other)
{
}
你用friend来处理的话,返回值也是一个Triangle,可以递归的再去加另外一个Triangle,就实现多个Triangle连加的形式