Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Một số chương trình hướng đối tượng trên C++
Nội dung xem thử
Mô tả chi tiết
Chương 10
Một số chương trình hướng đối tượng trên C++
Chương này trình bầy thêm một số chương trình hướng đối
tượng trên C++. Đây là các chương trình tương đối phức tạp,
hữu ích và sử dụng các công cụ mạnh của C++ như: Cách
truy nhập trực tiếp bộ nhớ màn hình, kỹ thuật đồ hoạ, con trỏ
void, tính kế thừa, lớp cơ sở trừu tượng, tương ứng bội,
phương thức ảo.
§ 1. Lớp cửa sổ
Chương trình gồm lớp cua_so và lớp stack
+ Lớp cửa sổ
Thuộc tính gồm:
char *noidung; // Trỏ đến vùng nhớ chứa nội dung
// soạn thảo trên cửa sổ
int cao,rong ; // Chiều cao và chiều rộng cửa sổ
int mau; // mau = 16*mau_nen + mau_chu
int ra_mh; // Cho biết cửa sổ đã được đưa ra màn hình
chưa?
int posx,posy; // Vị trí trên trái của cửa sổ trên màn hình
word *pluu; // Trỏ đến vùng nhớ chứa nội dung
// phần màn hình bị cửa sổ đè lên
Phương thức gồm:
cua_so();
cua_so(int c,int r,byte mau_nen, byte mau_chu);
int push(int x,int y); // Đưa cửa sổ ra màn hình tại (x,y)
// cho phép soạn thảo trên cửa sổ
// Bấm F6 chuyển sang cửa sổ khác
// Bấm ESC kết thúc
void pop(); // Tháo gỡ cửa sổ và khôi phục màn hình
int get_ra_mh();
+ Lớp stack (dùng để quản lý một dẫy cửa sổ)
Thuộc tính gồm:
int max; //Số cửa sổ cực đại có thể quản lý
int num; //Số cửa sổ hiện có trong stack
cua_so **pcs; //Con trỏ trỏ đến vùng nhớ chứa
//địa chỉ của các đối tượng cua_so
Phương thức gồm:
stack();
stack(int max_cs);
int accept(cua_so *cs,int x,int y); //Đưa một cửa sổ
//vào stack, nó sẽ hiện lên màn
hình
void del(); // Loại cửa sổ khỏi stack, nó sẽ bị xoá
// khỏi màn hình
Nội dung chương trình:
+ Đầu tiên hiện cửa sổ thứ nhất nền GREEN chữa WHITE.
Có thể soạn thảo trên đó.
+ Nếu bấm ESC kết thúc chương trình, nếu bấm F6 thì hiện
thêm cửa sổ thứ hai nền CYAN chữ MAGENTA. Có thể soạn
thảo trên đó.
+ Nếu bấm ESC kết thúc chương trình, nếu bấm F6 thì hiện
thêm cửa sổ thứ ba nền RED chữ YELLOW. Có thể soạn thảo
trên đó.
+ Đang ở một cửa sổ, nếu bấm ESC thì kết thúc chương
trình, nếu bấm F6 thì hiện cửa sổ tiếp theo (theo thứ tự vòng
quanh: 1 -> 2 -> 3 -> 1).
504 505
Chương trình sử dụng phương pháp truy nhập trực tiếp bộ
nhớ màn hình trình bầy trong chương 9.
// CT10_01.CPP
// lop cua_so
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <alloc.h>
typedef unsigned int word;
typedef unsigned char byte;
struct kt_word
{
word kt;
};
struct kt_byte
{
byte ma, mau;
};
union ky_tu
{
struct kt_byte h;
struct kt_word x;
};
typedef union ky_tu far *VP;
VP vptr=(VP)MK_FP(0xb800,0);
// Vi tri x,y tren man hinh
#define VPOS(x,y) (VP)(vptr + ((y)-1)*80+(x)-1)
class cua_so
{
private:
char *noidung;
int cao, rong;
int mau; // mau = 16*mau_nen + mau_chu
int ra_mh;
int posx,posy;
word *pluu;
public:
cua_so();
cua_so(int c,int r,byte mau_nen, byte mau_chu);
int push(int x,int y);
void pop();
int get_ra_mh();
};
cua_so::cua_so()
{
cao=rong=mau=ra_mh=posx=posy=0;
noidung=NULL; pluu=NULL;
}
cua_so::cua_so(int c,int r,byte mau_nen, byte mau_chu)
{
cao=c; rong=r;
mau= 16*mau_nen+mau_chu;
ra_mh=posx=posy=0;
noidung = (char*)malloc(cao*rong);
for (int i=0;i<cao*rong;++i)
noidung[i]=32;
pluu= (word*)malloc(2*cao*rong);
506 507