Mục tiêu: Tính đa hình
Bài tập 1
Xây dựng lớp hình hai chiều có hai phương thức thuần ảo là nhập() và tính diện tích().
- Xây dựng lớp hình tròn thừa kế lớp hình hai chiều và định nghĩa lại hai pt thuần ảo.
- Xây dựng lớp hình chữ nhật thừa kế lớp hình hai chiều và định nghĩa lại hai pt thuần ảo.
a) Viết chương trình nhập vào số n và mảng n phần tử gồm các hình tròn hoặc hình cn (do người nhập quyết định lúc nhập).
b) In tổng diện tích có trong mảng đó
Hướng dẫn:
B1: Khởi động Borland C 3.1 (như Assignment1)
B2: Vào menu File chọn New. Một file tên NONAME.CPP được tạo ra. Vào File chọn Save as và lưu file tên d:\dahinh\h2chieu.cpp
B3: Đánh các dòng sau để khai báo thư viện cho chương trình và hàm main:
	#include   // thu vien cho ham cin va cout
	#include   // thu vien cho ham getch
	void main()
	{
	
	}
B4: Đánh các lệnh sau vào trong hàm main
	#include 
	#include 

	/*
	XAY DUNG LOP HINH HAI CHIEU
	*/
	class Hinh2Chieu
	{
		public:
		//phuong thuc thuan ao
		virtual void nhap()=0;
		//phuong thuc thuan ao
		virtual float tinhDienTich()=0;
		
	};

	/*
	XAY DUNG LOP HINH TRON: THUA KE LOP HINH2CHIEU
	*/
	class HinhTron: public Hinh2Chieu
	{
		float banKinh;
		public:
		void nhap();
		float tinhDienTich();
	};
	void HinhTron::nhap()
	{
		cout << "Nhap ban kinh hinh tron:" << endl;
		cin >> banKinh;
	}
	float HinhTron::tinhDienTich()
	{
		return 3.14*banKinh*banKinh;
	}

	/*
	XAY DUNG LOP HINH CHU NHAT: THUA KE LOP HINH2CHIEU
	*/

	class HinhChuNhat: public Hinh2Chieu
	{
		float chieuDai, chieuRong;
		public:
		void nhap();
		float tinhDienTich();
	};
	void HinhChuNhat::nhap()
	{
		cout << "Nhap chieu dai, chieu rong hinh chu nhat:" << endl;
		cin >> chieuDai >> chieuRong;
	}

	float HinhChuNhat::tinhDienTich()
	{
		return chieuRong*chieuDai;
	}

	int main()
	{
		Hinh2Chieu **ds;
		int n,i;	
		cout << "Nhap vao so luong hinh:" << endl;
		cin >> n;
		
		//cap phat mang gom n phan tu (moi phan tu la con tro Hinh2Chieu)
		ds = new Hinh2Chieu* [n];
		int chon;
		float tongDienTich = 0;
		for (i = 0; i < n; i++)
		{
			cout << "1: nhap hinh tron \nSo bat ky: nhap hinh chu nhat: ";
			cin >> chon;
			// cap phat cho tung thanh phan cua mang
			if(chon==1)
				ds[i] = new HinhTron();
			else
				ds[i] = new HinhChuNhat();
			ds[i]->nhap();
			tongDienTich +=ds[i]->tinhDienTich();

		}
		cout << "Tong dien tich:"<< tongDienTich;
		
		//huy bo nho da cap phat
		for(i = 0; i < n; i++)
		delete []ds[i];
		delete []ds;
		getch();
		return 0; 
	}
B6: Nhấn F2 để lưu lại chương trình đã đánh. Nhấn F9 để biên dịch chương trình xem có lỗi hay không, nếu có thì cần phải sửa tất cả.
B7: Nhấn Ctrl+F9 để chạy chương trình.

Bài tập 2:
Xây dựng lớp người gồm 2 thuộc tính tên, năm sinh và các phương thức nhập/xuất cho các thuộc tính trên.
Xây dựng lớp sinh viên kế thừa lớp người. Ngoài ra lớp sinh viên có thêm thuộc tính là điểm trung bình và các phương thức nhập/xuất cho điểm trung bình
Xây dựng lớp giảng viên kế thừa lớp người. Ngoài ra lớp giảng viên có thêm thuộc tính là số giờ dạy và các phương thức nhập/xuất cho số giờ dạy
a) Nhập 1 số nguyên dương n và khởi tạo một mảng n phần tử gồm cả giảng viên và sinh viên.
b) in ra danh sách những giảng viên và sinh viên được thưởng biết rằng giảng viên được thưởng nếu số giờ dạy lớn hơn 300 và sinh viên được thưởng nếu điểm trung bình lớn hơn 7.5
Gợi ý: cần phải xây dựng thêm phương thức ảo trong lớp người
Hướng dẫn:
B1: Khởi động Borland C 3.1 (như Assignment1)
B2: Vào menu File chọn New. Một file tên NONAME.CPP được tạo ra. Vào File chọn Save as và lưu file tên d:\bai2_2.cpp.
B3: Đánh các dòng sau để khai báo thư viện cho chương trình và hàm main
	#include   // thu vien cho ham cin va cout
	#include   // thu vien cho ham getch
	void main()
    {

    }
B4: chèn lệnh khai báo dưới các lệnh khai báo thư viện và trên hàm main
	#include   // thu vien cho ham cin va cout
	#include   // thu vien cho ham getch
	class Nguoi
	{
		char ten[50];
		char namsinh[5];
		public:
		//phuong thuc ao
		virtual void nhap();
		virtual	void xuat();
		//phuong thuc thuan ao
		virtual int thuong()=0;
	};
	class SinhVien:public Nguoi
	{
		float diemTrungBinh;
		public:
		void nhap();
		void xuat();
		int thuong();
	};
	
	class GiangVien:public Nguoi
	{
		int soGioDay;
		public:
		void nhap();
		void xuat();
		int thuong();
	};
	
B5: Nhấn F2 để lưu lại chương trình đã đánh. Nhấn F9 để biên dịch chương trình xem có lỗi hay không, nếu có thì cần phải sửa tất cả.
B6: Nhấn Ctrl+F9 để chạy chương trình.
Với input:
Tên: gv1
Năm sinh: 1977
Số giờ dạy: 400
Tên: sv1
Năm sinh: 1992
Điểm trung bình: 7.9
Tên: sv2
Năm sinh: 1990
Điểm trung bình: 6.5
Ta được kết quả như hình sau:

Bài tập 3: Danh mục trong thư viện gồm các loại như là bài báo, sách, luận văn. Mỗi danh mục có nhan đề, tác giả, số lần được tham khảo và với mỗi loại danh mục ta có thêm các thông tin khác nhau:
- Bài báo có tên tạp chí đăng bài báo, số tap chi.
- Sách thì có nhà xuất bản và version.
- Luận văn có tên trường và nghành đào tạo.
a) Viết chương trình nhập vào 1 số n và khởi tạo một mảng n phần tử gồm 3 loại danh mục: báo, sách, luận văn
b) In ra danh mục nào có số lần được tham khảo là lớn nhất
c) In ra các tác giả của các danh mục được thưởng biết rằng điều kiện để được thưởng với báo chỉ cần trên 10 tham khảo, sách trên 20 tham khảo và luận văn trên 30 tham khảo
Hướng dẫn:
B1: Khởi động Borland C 3.1 (như Assignment1)
B2: Vào menu File chọn New. Một file tên NONAME.CPP được tạo ra. Vào File chọn Save as và lưu file tên d:\bai2_2.cpp.
B3: Đánh các dòng sau để khai báo thư viện cho chương trình và hàm main
	#include   // thu vien cho ham cin va cout
	#include   // thu vien cho ham getch
	void main()
	{

	}
B4: chèn lệnh khai báo dưới các lệnh khai báo thư viện và trên hàm main
	#include   // thu vien cho ham cin va cout
	#include   // thu vien cho ham getch
	class DanhMuc
	{
		char nhanDe[50];
		char tacGia[50];
		int soLan;
		public:
		int getSoLan();
		virtual	void nhap();
		virtual void xuat();
		virtual int thuong() = 0;
	};
	class BaiBao:public DanhMuc
	{
		char tenTapChi[50];
		int soTapChi ;
		public:
		void nhap();
		void xuat();
		int thuong();
	};
	
	class Sach: public DanhMuc
	{
		char nhaXuatBan[50];
		int version;
		public:
		void nhap();
		void xuat();
		int thuong();
	};
	class LuanVan:public DanhMuc
	{
		char tenTruong[50];
		char nganhDaoTao[50];
		public:
		void nhap();
		void xuat();
		int thuong();
	};
	
B5: Nhấn F2 để lưu lại chương trình đã đánh. Nhấn F9 để biên dịch chương trình xem có lỗi hay không, nếu có thì cần phải sửa tất cả.
B6: Nhấn Ctrl+F9 để chạy chương trình.
Với input:
Bài báo:
- Nhan đề: bb1
- Tác giả: tgb1
- Số lần tham khảo: 20
- Tên tạp chí: tcb1
- Số tạp chí: 1
Sách:
- Nhan đề: s1
- Tác giả: tbs1
- Số lần tham khảo: 30
- Nhà xuất bản: nxbs1
- Phiên bản: 1
Luận văn:
- Nhan đề: lv1
- Tác giả: tglv1
- Số lần tham khảo: 40
- Tên trường: PTIT
- Ngành đào tạo: IT
Ta được kết quả như hình sau: