Một số chương trình hướng đối tượng trên C++

25 767 2
Một số chương trình hướng đối tượng trên C++

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Một số chương trình hướng đối tượng trên C++

Chương 10 Một số chương trình hướng đối tượng C++ Chương trình bầy thêm số chương trình hướng đối tượng C++ Đây chương trình tương đối phức tạp, hữu ích sử dụng công cụ mạnh C++ như: Cách truy nhập trực tiếp nhớ hình, kỹ thuật đồ hoạ, trỏ void, tính kế thừa, lớp sở trừu tượng, tương ứng bội, phương thức ảo § Lớp cửa sổ Chương trình gồm lớp cua_so 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 cửa sổ int cao,rong ; // Chiều cao chiều rộng cửa sổ int mau; // mau = 16*mau_nen + mau_chu int ra_mh; // Cho biết cửa sổ đưa hình chưa? int posx,posy; // Vị trí trái cửa sổ hình word *pluu; // Trỏ đến vùng nhớ chứa nội dung // phầ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ổ hình (x,y) // cho phép soạn thảo cửa sổ // Bấm F6 chuyển sang cửa sổ khác // Bấm ESC kết thúc 504 void pop(); // Tháo gỡ cửa sổ khơi phục hình int get_ra_mh(); + Lớp stack (dùng để quản lý dẫy cửa sổ) Thuộc tính gồm: int max; //Số cửa sổ cực đại quản lý int num; //Số cửa sổ có stack cua_so **pcs; //Con trỏ trỏ đến vùng nhớ chứa //địa đố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 cửa sổ //vào stack, lên hình void del(); // Loại cửa sổ khỏi stack, bị xố // khỏi hình Nội dung chương trình: + Đầu tiên cửa sổ thứ GREEN chữa WHITE Có thể soạn thảo + Nếu bấm ESC kết thúc chương trình, bấm F6 thêm cửa sổ thứ hai CYAN chữ MAGENTA Có thể soạn thảo + Nếu bấm ESC kết thúc chương trình, bấm F6 thêm cửa sổ thứ ba RED chữ YELLOW Có thể soạn thảo + Đang cửa sổ, bấm ESC kết thúc chương trình, bấm F6 cửa sổ (theo thứ tự vịng quanh: -> -> -> 1) 505 Chương trình sử dụng phương pháp truy nhập trực tiếp nhớ hình trình bầy chương // CT10_01.CPP // lop cua_so #include #include #include 506 #include 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;ih.ma=ch1; ++xx; if (xx>=posx+rong) {++yy; xx=posx;} if (yy>=posy+cao) break; } else if (ch2==72||ch2==80||ch2==75||ch2==77) { if (ch2==72) yy ; else if (ch2==80) ++yy; else if (ch2==75) xx; else ++xx; if (xx=posx+rong) {++yy; xx=posx;} if (yy=posy+cao) break; } } // Luu ket qua soan thao pnd=noidung; 509 for (i=posx;ipop(); pcs[num]=NULL; } main() { 512 int ch; cua_so w1(10,40,GREEN,WHITE), w2(12,42,CYAN,MAGENTA), w3(14,44,RED,YELLOW); stack s(4); clrscr(); while(1) { ch=s.accept(&w1,5,5); if(ch==1)break; ch=s.accept(&w2,8,8); if(ch==1)break; ch=s.accept(&w3,11,11); if(ch==1)break; } Hàm tạo cmenu(int so_cn_menu,char **nd_menu); dùng để tạo menu (đối tượng kiểu cmenu) Hàm tạo chứa đối là: + Biến so_cn_menu chứa số chức menu + Con trỏ nd_menu trỏ tới vùng nhớ chứa địa chuỗi ký tự dùng làm tiêu đề menu tiêu đề chức menu Ví dụ câu lệnh: char *nd[]={"Quản lý vật tư", "Nhập số liệu", "Tìm kiếm","Kết thúc"}; cmenu mc(3,nd); tạo menu mc gồm chức năng: Nhập số liệu, Tìm kiếm Kết thúc Menu có tiêu đề là: Quản lý vật tư Phương thức int menu(int x,int y,int mau_nen,int mau_chon); thực việc sau: + Hiển thị menu vị trí (x,y) hình Menu có mầu xác định đối mau_nen mầu chức định chọn (hộp sáng) xác định đối mau_chon + Cho phép sử dụng phím mũi tên lên, xuống để di chuyển hộp sáng dùng phím Enter để khỏi phương thức 513 + Sau thoát khỏi, phương thức trả giá trị số thứ tự (tính từ 1) chức chọn Chương trình xây dựng lớp cmenu minh hoạ cách sử dụng lớp /* CT10_02.CPP menu.cpp lop cmenu */ #include #include #include #include #include typedef unsigned int word; typedef unsigned char byte; 514 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 cmenu { private: int so_cn,cao,rong,posx,posy; int chon; char **nd; private: void hiendc(char *dc,int x,int y, int mau); void hien_menu(int x,int y,int mau_nen,int mau_chon); public: cmenu(int so_cn_menu,char **nd_menu); int menu(int x,int y,int mau_nen,int mau_chon); }; cmenu::cmenu(int so_cn_menu,char **nd_menu) { cao=so_cn=so_cn_menu; nd=nd_menu; rong=0; chon=1; int d; for(int i=0;i rong) rong=d; } 515 void cmenu::hiendc(char *dc,int x,int y, int mau) { VP ptr; int i; byte m=16*mau+15; //chu trang for(i=0;ih.mau=m ; ptr->h.ma=32; } for(i=0;ih.ma=dc[i]; } } void cmenu::hien_menu(int x,int y,int mau_nen,int mau_chon) { 516 for(int i=0;inext = new listnode; if(tail->next == NULL) errhandler(); tail = tail->next; } 529 tail->dataptr= temp->dataptr; tail->next=NULL; temp = temp->next; } } // constructor s_list::s_list() : container() { head=NULL; tail=NULL; } s_list::s_list(const s_list &s1):container(s1) 530 { copy(s1); } s_list::~s_list() { this->empty(); } void s_list::operator=(const s_list &s1) { this->empty(); count=s1.count; copy(s1); } void s_list::empty() { listnode *q,*p; p = head; head=NULL; tail=NULL; while (p!=NULL) { q=p; p=p->next; delete q; } } // Lop stack class stack:public s_list { public: stack(); 531 stack(const stack &st); void operator=(const stack &st); virtual int store(void *item); // Cat mot phan tu vao thung virtual void *examine(); // Xem gia tri mot phan tu virtual void *retrieve(); // Lay mot pt }; stack::stack():s_list() { } stack::stack(const stack &st):s_list(st) { } void stack::operator=(const stack &st) { this->s_list::operator=(st); //Dung toan tu gan cua s_list } int stack::store(void *item) // Cat mot phan tu vao thung { //Dua vao dau danh sach listnode *p; p= new listnode ; if(p==NULL) return 1; count++; p->dataptr=item; p->next=head; head=p; return 0; } void *stack::examine() // Xem gia tri mot phan tu { if(count==0) return NULL; else return head->dataptr; } void *stack::retrieve() // Lay mot pt 532 { if(count==NULL) return NULL; else { listnode *p; void *value; value = head->dataptr; p=head; head = p->next; delete p; count ; return value; } } // Lop queue class queue:public stack { public: queue(); queue(const queue &q); void operator=(const queue &q); virtual int store(void *item); // Cat mot phan tu vao thung }; queue::queue(): stack() { } queue::queue(const queue &q):stack(q) { 533 } void queue::operator=(const queue &q) { this->stack::operator=(q); //Dung toan tu gan cua stack } int queue::store(void *item) { // Dat vao cuoi listnode *q; q=new listnode; if(q==NULL)return 1; // Bo sung q->next=NULL; q->dataptr=item; if(count==0) { { head=q; tail=q; } else { tail->next=q; tail=q; } count++; return 0; } class TS { private: char ht[25]; int sobd; float td; public: 534 void nhap() { cout sobd; cout > td; } void xuat() cout

Ngày đăng: 17/08/2012, 11:07

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan