Cài đặt lớp Point và Traingle

Bài tập

Bạn hãy cài đặt hai lớp Point, Traingle với thông tin như sau:

Giải thích:

Lớp Point:

  • x,y lần lượt là thuộc tính chỉ tọa độ của điểm có kiểu dữ liệu int và ở phạm vi truy cập public.
  • Point() là phương thức khởi tạo không tham số.
  • Point(x: int, y: int) là phương thức khởi tạo 2 tham số.
  • operator - (A: Point, B: Point): friend Point là phương thức nạp chồng toán tử - giữa 2 Point.
  • distance(B: Point): double là phương thức tính khoảng cách giữa Point hiện tại tới Point B theo công thức sqrt((Xa-Xb)^2+(Ya-Yb)^2)
  • Các phương thức còn lại là settergetter.

Lớp Traingle:

  • Traingle là lớp kế thừa từ lớp Point.
  • A, B, C lần lượt là các điểm của tam giác có kiểu dữ liệu Point ở phạm vi truy cập private.
  • Traingle() là phương thức khởi tạo không tham số.
  • Traingle(A: Point, B: Point, C: Point) là phương thức khởi tạo 3 tham số.
  • perimeter(): double là phương thức trả về chu vi của tam giác.
  • area(): double là phương thức trả về diện tích của tam giác.
  • center(): Point là phương thức trả về tọa độ trọng tâm tam giác.
  • isTraingle(): bool là phương thức kiểm tra 3 điểm A, B và C có thỏa mãn yêu cầu tam giác không.
  • Các phương thức còn lại là setter getter.

Hướng dẫn:

Class Point.cpp

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

class Point {
public:
	int x;
	int y;
public:
	Point() {}
	Point(int x, int y) :x(x), y(y) {}
	void setX(int x)
	{
		this->x = x;
	}
	int getX()
	{
		return x;
	}
	void setY(int y)
	{
		this->y = y;
	}
	int getY()
	{
		return y;
	}
	friend Point operator - (Point A, Point B)
	{
		return Point(A.x - B.x, A.y - B.y);
	}
	double distance(Point B)
	{
		return sqrt((this->x - B.x) * (this->x - B.x) + (this->y - B.y) * (this->y - B.y));
	}
	void display()
	{
		cout << "X = " << x << " Y = " << y << endl;
	}
};

Class Traingle.cpp

#include "Point.cpp"
class Traingle :public Point {
private:
	Point A;
	Point B;
	Point C;
public:
	Traingle() {}
	Traingle(Point A, Point B, Point C) :A(A), B(B), C(C) {}
	void display()
	{
		A.display();
		B.display();
		C.display();
	}
	void setA(Point A)
	{
		this->A = A;
	}
	Point getA()
	{
		return A;
	}
	void setB(Point B)
	{
		this->B = B;
	}
	Point getB()
	{
		return B;
	}
	void setC(Point C)
	{
		this->C = C;
	}
	Point getC()
	{
		return C;
	}
	double perimeter()
	{
		return A.distance(B) + A.distance(C) + B.distance(C);
	}
	double area()
	{
		return abs((B.x - A.x) * (C.y - A.y) - (C.x - A.x) * (B.y - A.y)) * 0.5;
	}
	Point center()
	{
		return Point(double(A.x + B.x + C.x) / 3, double(A.y + B.y + C.y) / 3);
	}
	bool isTraingle()
	{
		double a = A.distance(B);
		double b = B.distance(C);
		double c = C.distance(A);
		if (a + b > c && a + c > b && b + c > a && a > 0 && b > 0 && c > 0)
		{
			return true;
		}
		return false;
	}
};