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

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.
-

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;}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; }

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();
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";
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;}


}};
};
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


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() {

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 {}
}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;

&)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;}
}

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:


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;}


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<<"point &rp = pc \n";
cout<<"point &rp = pc \n";point &rp=pc;
point &rp=pc;rp.move(2,3);
rp.move(2,3);cout<<"rp.move(2,3)\n";
cout<<"rp.move(2,3)\n";pc.display();
pc.display();rp.display();
rp.display();getch();
getch();

float getx() {return x;}
float getx() {return x;}float gety() {return y;}
float gety() {return y;}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;

unsigned int color;public:
public:coloredpoint():point() {
coloredpoint():point() {color =0;
color =0;}
}coloredpoint(float ox, float oy, unsigned int c);
coloredpoint(float ox, float oy, unsigned int c);coloredpoint(coloredpoint
coloredpoint(coloredpoint
&b):point(b.getx(),b.gety()) {
&b):point(b.getx(),b.gety()) {cout<<"Goi ham thiet lap sao chep""

cout<<"Mau "<<color<<endl;}
}};
};
CHƯƠNG 5:
KỸ THUẬT THỪA KẾ
1. ĐƠN THỪA KẾ
Hàm thiết lập sao chép
coloredpoint::coloredpoint
coloredpoint::coloredpoint(float ox, float oy, unsigned c) : point(ox, oy)
(float ox, float oy, unsigned c) : point(ox, oy){
{color = c;
color = c;}

cout<<"qc= ";qc.display();
qc.display();getch();
getch();}
}
CHƯƠNG 5:
KỸ THUẬT THỪA KẾ
1. ĐƠN THỪA KẾ
Các kiểu dẫn xuất khác nhau
Tứ khoá
Tứ khoá
Kiểu dẫn xuất
Kiểu dẫn xuất
public
public
Dẫn xuất public
Dẫn xuất public
private
private
Dẫn xuất private
Dẫn xuất private
protected

public
Dẫn xuất
protected
Dẫn xuất
private
TT
TN
FMA
TN
NSD
TTM TN
NSD
TTM TN
NSD
TTM TN
NSD
pub
C C
pub
C
pro
K
pri
K
pro
C K
pro
K
pro
K

viên cao đẵng, tại chức. Trong trường cũng có nhiều phòng ban và các khoa. Đối với nhân viên và
cán bộ giảng dạy trường cần quản lý thông tin như mã nhân viên, tên, năm sinh, địa chỉ, hệ số
lượng, phòng hay khoa làm việc. Đối với giảng viên cần quản lý thêm thông tin về học hàm, học vị,
môn giảng dạy. Đối với nhân viên cần quản lý thông tin về chuyên môn. Đối với khoa hay phòng
ban thì quản lý tên, tên trưởng khoa/phòng, số sinh viên theo học từng loại nếu là khoa
Đối với học viên và sinh viên cần quản lý mã số, tên, năm sinh, khóa, thuộc khoa nào, địa chỉ. Đối với
học viên cao học cần quản lý thông tin chuyên ngành học đại học. Đối với học viên tại chức cần
quản lý cơ quan công tác.
CHƯƠNG 5:
KỸ THUẬT THỪA KẾ
3. HÀM ẢO VÀ TÍNH ĐA HÌNH
3.1 Giới thiệu
-
Một tham trỏ tới đối tượng có thể nhận địa chỉ của bất kỳ đối tượng con cháu nào. Tuy nhiên, lời
gọi tới một phương thức của một đối tượng được trỏ tới luôn được coi như lời gọi đến phương
thức tương ứng với kiểu con trỏ, không phải tương ứng với đối tượng đang trỏ đến. Trường hợp
này gọi là “gán kiểu tĩnh – static typing” hay “gán kiểu sớm – early binding”
-
Để gọi phương thức tương ứng với đối tượng được trỏ đến, cần phải xác định kiểu của đối tượng
tại thời điểm thực hiện chương trình. Trường hợp này ta gọi là “ gán kiểu động – dynamic typing”
hay gán kiểu muộn – late binding”
-
C++ đưa ra khái niệm hàm ảo (virtural) để giải quyết trương hợp này
CHƯƠNG 5:
KỸ THUẬT THỪA KẾ
3. HÀM ẢO VÀ TÍNH ĐA HÌNH
#include <iostream.h>
#include <iostream.h>
#include <conio.h>
#include <conio.h>
point(float ox, float oy) {
point(float ox, float oy) {cout<<"point::point(float, float)\n";
cout<<"point::point(float, float)\n";x = ox;
x = ox;y = oy;
y = oy;}
}point(point &p) {
point(point &p) {cout<<"point::point(point &)\n";
cout<<"point::point(point &)\n";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 = 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;}
}};
};
coloredpoint::coloredpoint(float ox, float oy,

coloredpoint pc(2,3,5);cout<<"pc.display();\n";
cout<<"pc.display();\n";pc.display();
pc.display();cout<<"point *ptr=&pc;\n";
cout<<"point *ptr=&pc;\n";point *ptr=&pc;
point *ptr=&pc;cout<<"ptr->display();\n";
cout<<"ptr->display();\n";ptr->display();
ptr->display();cout<<"point p(10,20);\n";
cout<<"point p(10,20);\n";


getch();}
}
CHƯƠNG 5:
KỸ THUẬT THỪA KẾ
3. HÀM ẢO VÀ TÍNH ĐA HÌNH
-
Từ khoá virtual có thể đặt trước hay sau tên kiểu dữ liệu nhưng phải trước tên hàm để chỉ rằng là
một hàm ảo
-
Tuỳ thuộc vào kiểu của đối tượng có địa chỉ chứa trong con trỏ lớp dẫn xuất ptr mà lời gọi hàm ptr-
>display() sẽ gọi đến phương thức display() của point hay coloredpoint
CHƯƠNG 5:
KỸ THUẬT THỪA KẾ
3. HÀM ẢO VÀ TÍNH ĐA HÌNH
#include <iostream.h>
#include <iostream.h>
#include <conio.h>
#include <conio.h>
class point {
class point {float x,y;
float x,y;public:


x = ox;
x = ox;y = oy;
y = oy;}
}point(point &p) {
point(point &p) {cout<<"point::point(point &)\n";
cout<<"point::point(point &)\n";x = p.x;
x = p.x;y = p.y;
y = p.y;}

}};
};
void point::display() {
void point::display() {cout<<"Toa do : "<<x<<" "<<y<<endl;
cout<<"Toa do : "<<x<<" "<<y<<endl;Identifier();
Identifier();}
}


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status