// File: ex7-5.cpp #include #include using namespace std; class Triangle { protected: double a,b,c; public: Triangle(double s1,double s2,double s3) : a(s1), b(s2), c(s3) {} double area()const; double perimeter() const { return a + b + c; } friend ostream& operator<<(ostream&, const Triangle&); }; double Triangle::area() const { double s = perimeter()/2.0; // s = semiperimater return sqrt(s*(s-a)*(s-b)*(s-c)); } ostream& operator<<(ostream& out, const Triangle& triangle) { out << &triangle << ": sides " << triangle.a << ' ' << triangle.b << ' ' << triangle.c; return out; } class Isosceles : public Triangle { public: Isosceles(double base, double leg) : Triangle(base,leg,leg) {} }; class Equilateral : public Isosceles { public: Equilateral(double side) : Isosceles(side,side) {} }; int main() { Triangle t1(3,4,5); cout << t1 << endl; cout << "perimeter=" << t1.perimeter() << " area=" << t1.area() << endl; Isosceles t2(2,4); cout << t2 << endl; cout << "perimeter=" << t2.perimeter() << " area=" << t2.area() << endl; Equilateral t3(5); cout << t3 << endl; cout << "perimeter=" << t3.perimeter() << " area=" << t3.area() << endl; }