Bài tập

Bạn hãy tạo các lớp Geometry, Traingle, Rectangle, Circle với các thông tin như sau:

Giải thích:

Lớp Geometry:

  • lớp trừu tượng các class kế thừa bắt buộc phải định nghĩa lại các phương thức thuần ảo.
  • perimeter(): double là phương thức thuần ảo trả về chu vi của hình học.
  • area(): double là phương thức thuần ảo trả về diện tíc của hình học.
  • display(): void là phương thức ảo hiển thị chu vi và diện tích hình học. Ví dụ perimeter = 1, area = 1 thì màn hình sẽ hiển thị:
Perimeter: 1
Area: 1

Lớp Traingle:

  • Là class kế thừa từ class Geometry
  • a, b, c lần lượt là các thuộc tính chỉ độ dài 3 cạnh của tam giác có kiểu dữ liệu int ở phạm vi truy cập private.
  • perimeter(): double là phương thức trả về chu vi tam giác.
  • area(): double là phương thức trả về diện tích tam giác.

Lớp Rectangle:

  • Là class kế thừa từ class Geometry
  • h, w lần lượt là các thuộc tính chỉ chiều rộng và chiều dài của hình chữ nhật có kiểu dữ liệu int ở phạm vi truy cập private.
  • perimeter(): double là phương thức trả về chu vi hình chữ nhật.
  • area(): double là phương thức trả về diện tích hình chữ nhật.

Lớp Circle:

  • Là class kế thừa từ class Geometry
  • r là thuộc tính chỉ bán kính của hình tròn có kiểu dữ liệu int ở phạm vi truy cập private.
  • perimeter(): double là phương thức trả về chu vi hình tròn.
  • area(): double là phương thức trả về diện tích hình tròn.

Hướng dẫn

File Geometry.cpp

#pragma once
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

class Geometry {
public:
	virtual double perimeter() = 0;
	virtual double area() = 0;
	virtual void display()
	{
		cout << "Perimeter: " << perimeter() << endl;
		cout << "Area: " << area() << endl;
	}
};

Lớp Traingle.cpp

#pragma once
#include "Geometry.cpp"
class Traingle : public Geometry {
private:
	int a;
	int b;
	int c;
public:
	Traingle() {}
	Traingle(int a, int b, int c) : a(a), b(b), c(c) {}
	double perimeter()
	{
		return a + b + c;
	}
	double area()
	{
		double p = (a + b + c) / 2.0;
		return sqrt(p * (p - a) * (p - b) * (p - c));
	}
};

Lớp Rectangle.cpp

#pragma once
#include "Geometry.cpp"
class Rectangle : public Geometry {
private:
	int w;
	int h;
public:
	double perimeter() {
		return (w + h) * 2;
	}
    Rectangle(int w, int h): w(w), h(h) {}
	double area()
	{
		return w * h;
	}
};

Lớp Circle.cpp

#pragma once
#include "Geometry.cpp"
class Circle :public Geometry {
private:
	int r;
public:
	Circle() {}
	Circle(int r) :r(r) {}
	double perimeter()
	{
		return 2 * 3.14 * r;
	}
	double area()
	{
		return 3.14 * r * r;
	}
};