1. Trang chủ
  2. » Giáo án - Bài giảng

Giáo án - Bài giảng: KỸ THUẬT THỪA KẾ TRONG C++

56 841 10

Đ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

Thông tin cơ bản

Định dạng
Số trang 56
Dung lượng 1,77 MB

Nội dung

CHƯƠNG 5: KỸ THUẬT THỪA KẾ  Cài đặt sự thừa kế  Sử dụng các thành phần của lớp cơ sở  Định nghĩa lại các hàm thành phần  Truyền thông tin giữa các hàm thiết lập của lớp dẫn xuất và lớp cơ sở  Các loại dẫn xuất khác nhau và sự thay đổi trạng thái của các thành phần lớp cơ sở  Sự tương thích giữa các đối tượng của lớp dẫn xuất và lớp cơ sở  Toán từ gán và thừa kế  Hàm ảo và tính đa hình  Hàm ảo thuần tuý và lớp cơ sở trừu tượng  Đa thừa kế và các vấn đề liên quan CHƯƠNG 5: KỸ THUẬT THỪA KẾ 1. GIỚI THIỆU - Thừa kế cho phép ta định nghĩa một lớp mới, gọi là lớp dẫn xuất, từ một lớp đã có, gọi là lớp cơ sở. Lớp dẫn xuất sẽ thừa kế các thành phần (dữ liệu, hàm) của lớp cơ sở, đồng thời thêm các thành phần mới. - Thừa kế cho phép không cần phải biên dịch lại các thành phần chương trình vốn đã có trong các lớp cơ sở và hơn thế nữa không cần phải có chương trình nguồn tương ứng CHƯƠNG 5: KỸ THUẬT THỪA KẾ 1. GIỚI THIỆU Một ví dụ về sự thừa kế Lớp: mặt hàng Thuộc tính: Tên Số lượng trong kho Giá mua Giá bán Các phương thức Chênh lệch giá mua bán Mua Bán Lớp: mặt hàng nhập khẩu thừa kế từ lớp mặt hàng Thuộc tính Thuế nhập khẩu Các phương thức chênh lệch giá mua bán Lớp: xe gắn máy thừa kế từ lớp mặt hàng nhập khẩu CHƯƠNG 5: KỸ THUẬT THỪA KẾ 1. GIỚI THIỆU Một ví dụ về sự thừa kế Lớp: xe gắn mày thừa kế từ mặt hàng nhập khẩu Thuộc tính: Dung tích xilanh Các phương thức Lớp: hàng điện tử dân dụng thừa kế từ mặt hàng Thuộc tính Điện áp Thời gian bảo hành Các phương thức Thời gian bảo hành thực tế CHƯƠNG 5: KỸ THUẬT THỪA KẾ 1. ĐƠN THỪA KẾ Lớp dẫn xuất chỉ thừa kế từ một lớp cơ cở #include <iostream.h> #include <iostream.h> #include <conio.h> #include <conio.h> class point { class point { float x,y; float x,y; public: public: point() {x = 0; y = 0;} point() {x = 0; y = 0;} point(float ox, float oy) {x = ox; y = oy; } point(float ox, float oy) {x = ox; y = oy; } point(point &p) {x = p.x; y = p.y;} point(point &p) {x = p.x; y = p.y;} void display() { void display() { cout<<"Goi ham point::display() \n"; cout<<"Goi ham point::display() \n"; cout<<"Toa do :"<<x<<" "<<y<<endl; cout<<"Toa do :"<<x<<" "<<y<<endl; } } void move(float dx, float dy) { void move(float dx, float dy) { x += dx; x += dx; y += dy; y += dy; } } }; }; class coloredpoint : public point { class coloredpoint : public point { unsigned int color; unsigned int color; public: public: coloredpoint():point() { coloredpoint():point() { color =0; } color =0; } coloredpoint(float ox, float oy, unsigned int coloredpoint(float ox, float oy, unsigned int c):point(ox,oy) { c):point(ox,oy) { color = c; color = c; } } coloredpoint(coloredpoint &b):point((point &)b) coloredpoint(coloredpoint &b):point((point &)b) { { color = b.color; } color = b.color; } void display() { void display() { cout<<"Ham coloredpoint::display()\n"; cout<<"Ham coloredpoint::display()\n"; point::display(); point::display(); // // cout<<"Mau "<<color<<endl; cout<<"Mau "<<color<<endl; } } }; }; CHƯƠNG 5: KỸ THUẬT THỪA KẾ 1. ĐƠN THỪA KẾ Lớp dẫn xuất chỉ thừa kế từ một lớp cơ cở void main() { void main() { clrscr(); clrscr(); coloredpoint m; coloredpoint m; cout<<"Diem m \n"; cout<<"Diem m \n"; m.display(); m.display(); cout<<"Chi hien thi toa do cua m\n"; cout<<"Chi hien thi toa do cua m\n"; m.point::display(); m.point::display(); coloredpoint n(2,3,6); coloredpoint n(2,3,6); cout<<"Diem n \n"; cout<<"Diem n \n"; n.display(); n.display(); cout<<"Chi hien thi toa do cua n\n"; cout<<"Chi hien thi toa do cua n\n"; n.point::display(); n.point::display(); coloredpoint p =n; coloredpoint p =n; cout<<"Diem p \n"; cout<<"Diem p \n"; p.display(); p.display(); cout<<"Chi hien thi toa do cua p\n"; cout<<"Chi hien thi toa do cua p\n"; p.point::display(); p.point::display(); getch(); getch(); } } CHƯƠNG 5: KỸ THUẬT THỪA KẾ 1. ĐƠN THỪA KẾ - Các thành phần private trong lớp cơ sở không thể truy nhập được từ các lớp dẫn xuất - Lớp dẫn xuất có thể truy nhập đến thành phần protected và public của lớp cơ sở - Phạm vi của lớp dẫn xuất che lấp lớp cơ sở, do đó ta cần dùng toán tử phạm vi :: khi truy xuất đến thành phần thuộc lớp cơ sở mà có đã được kế thừa lại trong lớp dẫn xuất - Một đối tượng của lớp dẫn xuất có thể thay thế một đối tượng của lớp cơ sở -> có việc chuyển kiểu ngầm định từ một đối tượng thuộc lớp dẫn xuất sang một đối tượng thuộc lớp cơ sở point p; p.display(); coloredpointcol pc(2,3,5); pc=p; //phù hợp - Một con trỏ đối tượng lớp cơ sở có thể chỉ đến một đối tượng lớp dẫn xuất, còn một con trỏ lớp dẫn xuất không thể nhận địa chỉ của một đối tượng lớp cơ sở CHƯƠNG 5: KỸ THUẬT THỪA KẾ 1. ĐƠN THỪA KẾ #include <iostream.h> #include <iostream.h> #include <conio.h> #include <conio.h> class point { class point { float x,y; float x,y; public: public: point() {x = 0; y = 0;} point() {x = 0; y = 0;} point(float ox, float oy) {x = ox; y = oy; } point(float ox, float oy) {x = ox; y = oy; } point(point &p) {x = p.x; y = p.y;} point(point &p) {x = p.x; y = p.y;} void display() { void display() { cout<<"Goi ham point::display() \n"; cout<<"Goi ham point::display() \n"; cout<<"Toa do :"<<x<<" "<<y<<endl; cout<<"Toa do :"<<x<<" "<<y<<endl; } } void move(float dx, float dy) { void move(float dx, float dy) { x += dx; x += dx; y += dy; y += dy; } } }; }; class coloredpoint : public point { class coloredpoint : public point { unsigned int color; unsigned int color; public: public: coloredpoint():point() { coloredpoint():point() { color =0; color =0; } } coloredpoint(float ox, float oy, unsigned int coloredpoint(float ox, float oy, unsigned int c):point(ox,oy) { c):point(ox,oy) { color = c; color = c; } } coloredpoint(coloredpoint &b):point((point coloredpoint(coloredpoint &b):point((point &)b) { &)b) { color = b.color; color = b.color; } } void display() { void display() { cout<<"Ham coloredpoint::display()\n"; cout<<"Ham coloredpoint::display()\n"; point::display(); point::display(); /*gäi tíi hµm cïng tªn trong /*gäi tíi hµm cïng tªn trong líp c¬ së*/ líp c¬ së*/ cout<<"Mau "<<color<<endl; cout<<"Mau "<<color<<endl; } } }; }; CHƯƠNG 5: KỸ THUẬT THỪA KẾ 1. ĐƠN THỪA KẾ chú ý: adp->display(); là point::display(); void main() { void main() { clrscr(); clrscr(); point *adp; point *adp; coloredpoint pc(2,3,5); coloredpoint pc(2,3,5); pc.display(); pc.display(); cout<<"adp = &pc \n"; cout<<"adp = &pc \n"; adp=&pc; adp=&pc; adp->move(2,3); adp->move(2,3); cout<<"adp->move(2,3)\n"; cout<<"adp->move(2,3)\n"; pc.display(); pc.display(); adp->display(); adp->display(); getch(); getch(); } } CHƯƠNG 5: KỸ THUẬT THỪA KẾ 1. ĐƠN THỪA KẾ Tương thích giữa con trỏ lớp dẫn xuất và con trỏ lớp cơ sở #include <iostream.h> #include <iostream.h> #include <conio.h> #include <conio.h> class point { class point { float x,y; float x,y; public: public: point() {x = 0; y = 0;} point() {x = 0; y = 0;} point(float ox, float oy) {x = ox; y = oy; } point(float ox, float oy) {x = ox; y = oy; } point(point &p) {x = p.x; y = p.y;} point(point &p) {x = p.x; y = p.y;} void display() { void display() { cout<<"Goi ham point::display() \n"; cout<<"Goi ham point::display() \n"; cout<<"Toa do :"<<x<<" "<<y<<endl; cout<<"Toa do :"<<x<<" "<<y<<endl; } } void move(float dx, float dy) { void move(float dx, float dy) { x += dx; x += dx; y += dy; y += dy; } } }; }; class coloredpoint : public point { class coloredpoint : public point { unsigned int color; unsigned int color; public: public: coloredpoint():point() { coloredpoint():point() { color =0; } color =0; } coloredpoint(float ox, float oy, unsigned int coloredpoint(float ox, float oy, unsigned int c):point(ox,oy) { c):point(ox,oy) { color = c; color = c; } } coloredpoint(coloredpoint &b):point((point coloredpoint(coloredpoint &b):point((point &)b) { &)b) { color = b.color; color = b.color; } } void display() { void display() { cout<<"Ham coloredpoint::display()\n"; cout<<"Ham coloredpoint::display()\n"; point::display(); point::display(); cout<<"Mau "<<color<<endl; cout<<"Mau "<<color<<endl; } } }; }; [...]... xut public - Trong dn xut public cỏc thnh phn cỏc hm bn v cỏc i tng ca lp dn xut khụng th truy xut n thnh phn private ca lp c s - Cỏc thnh phn protected trong lp c s tr thnh cỏc thnh phn private trong lp dn xut - Cỏc thnh phn public ca lp c s vn l public trong lp dn xut Dn xut private - Cỏc thnh phn public trong lp c s tr thnh cỏc thnh phn private trong lp dn xut - Cỏc thnh phn protected trong lp c... rp.move(2,3); cout . private - C c thành phần public trong lớp c sở trở thành c c thành phần private trong lớp dẫn xuất - C c thành phần protected trong lớp c sở c thể truy nhập đư c từ c c hàm thành phần và c c hàm. thành phần private c a lớp c sở - C c thành phần protected trong lớp c sở trở thành c c thành phần private trong lớp dẫn xuất - C c thành phần public c a lớp c sở vẫn là public trong lớp dẫn xuất Dẫn. unsigned c) : point(ox, oy) { { color = c; color = c; } } void main() { void main() { clrscr(); clrscr(); coloredpoint pc(2,3,5); coloredpoint pc(2,3,5); cout<<"pc

Ngày đăng: 16/04/2014, 15:07

TỪ KHÓA LIÊN QUAN