Bài giảng Lập trình hướng đối tượng - Huỳnh Thị Thu Thủy
Trang 1BÀI GiẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Giảng viên: Huỳnh Thị Thu Thủy
Số tiết lý thuyết: 45
Số tiết thực hành: 30
Tài liệu tham khảo
1 Lập trình hướng đối tượng C++,Trần Văn
Lăng, phân viện Công nghệ thông tin TPHCM, NXB Thống kê, 1996
2 Giáo trình ngôn ngữ lập trình hướng đối tượng với C++, Nguyễn Chí Trung, NXB
1 Giới thiệu ngôn ngữ C++
2 Lập trình hướng đối tượng là gì
Trang 21 Giới thiệu ngôn ngữ C++
a Các kiểu dữ liệu cơ bản
1 Giới thiệu ngôn ngữ C++ (tt)
b Khai báo dữ liệu
Khai báo biến
Khai báo biến
Cú pháp: <tên kiểu> <tên biến>;
Ví dụ:
• Biến nguyên a: int a;
• Biến thực x,y:Biến thực x,y: float x,y;float x,y;
• Biến chuỗi st: char * st;//cấp phát bộ nhớHoặc char st[<n>] ; // không cần gọi cấp (với n nguyên dương) phát bộ nhớ
6
1 Giới thiệu ngôn ngữ C++ (tt)
Các vị trí khai báo biến
- Bắt đầu của một khối:
- Bắt đầu của một khối:
1 Giới thiệu ngôn ngữ C++ (tt)
Khai báo hằng
• Cách 1:
const <tên kiểu> <tên hằng> = <giá trị>;
- Ví dụ:
const float PI=3.1416;
const max=100;//mac nhien int const char * st=“Tin hoc”;
Trang 31 Giới thiệu ngôn ngữ C++ (tt)
1 Giới thiệu ngôn ngữ C++ (tt)
c Xuất nhập dữ liệu
Lệnh xuất: Sử dụng toán tửchèn(<<)kết hợp
Lệnh xuất: Sử dụng toán tử chèn( )kết hợp với luồng xuất cout
– Cần khai báo file tiêu đề iostream.h– Ví dụ:
1 Giới thiệu ngôn ngữ C++ (tt)
1 Giới thiệu ngôn ngữ C++ (tt)
d Cấu trúc điều khiển
if (<biểu thức điều kiện>){ <công việc 1>; }
else { <công việc 2>; }
Ý nghĩa: Nếu <biểu thức điều kiện> có giá
trị khác 0 thì thực hiện <công việc 1>
ngược lại thực hiện <công việc 2>
Trang 41 Giới thiệu ngôn ngữ C++ (tt)
Cho biết số đó là chẵn hay lẻ
Cho biết số đó là chẵn hay lẻ
else cout<<“n le”;
else cout<<“khong xet”;
return 0; }
13
1 Giới thiệu ngôn ngữ C++ (tt)
Ví dụ 2: Viết CT nhập vào 3 số nguyên a,b,c Cho biết giá trị số lớn nhất.g ị
#include<iostream.h>
main(){ int a,b,c;
cout<<“nhap 3 so nguyen:”; cin>>a>>b>>c;
if (a>b)
if (a>c) cout<<“so lon nhat la”<<a;
if (a>c) cout<< so lon nhat la <<a;
else cout<<“so lon nhat la”<<c;
else if (b>c) cout<<“so lon nhat la”<<b;
else cout<<“so lon nhat la”<<c;
return 0; }
14
1 Giới thiệu ngôn ngữ C++ (tt)
Cấu trúc switch … case
{ case <giá trị 1>: {<công việc 1>; break;}
case <giá trị 2>: <công việc 2>; break;
case <giá trị n>: <công việc n>; break;
switch(so){ case 1: cout<<“Chu nhat”; break;
…case 7: cout<<“Thu bay”; break;
default: cout<<“Khong xet”;
}return 0; }
Trang 51 Giới thiệu ngôn ngữ C++ (tt)
Cấu trúc for
for(<biểu thức 1>; <biểu thức 2>; <biểu thức 3>)
{ <công việc>; }
Trong đó:
+ <Biểu thức 1>: câu lệnh khởi tạo giá trị ban đầu cho biến chạy
+ <Biểu thức 1>: câu lệnh khởi tạo giá trị ban đầu cho biến chạy.
+ <Biểu thức 2>: điều kiện để thực hiện công việc của for.
+ <Biểu thức 3>: câu lệnh giúp làm thay đổi giá trị <biểu thức 2>.
17
1 Giới thiệu ngôn ngữ C++ (tt)
• Lưu đồ cấu trúc for
1 Giới thiệu ngôn ngữ C++ (tt)
1 Giới thiệu ngôn ngữ C++ (tt)
Ví dụ 2 : Viết CT nhập số nguyên dương n In
ra màn hình số chẵn <=n trên 1 dòng, số lẻ <=n trên dòng khác
trên dòng khác
#include<iostream.h>
void main() { int n; cout<<“nhap n:”; cin>>n;
if (n>0)
{ for (int i=2; i<=n; i++)
if (i%2==0) cout<<i<<“ ”;
if (i%2==0) cout<<i<< ; cout<<“\n”;
for (int i=1; i<=n; i++)
if (i%2!=0) cout<<i<<“ ”; }
else cout<<“Khong xet”; }
Trang 61 Giới thiệu ngôn ngữ C++ (tt)
Ví dụ 3 : Viết CT nhập số nguyên dương n In
ra màn hình giá trị 2 luỹ thừa n
1 Giới thiệu ngôn ngữ C++ (tt)
ể
while(<biểu thức>){ <công việc>; }
Ví dụ 1: Đoạn CT in các số từ 1 đến n
i=1;
while (i<=n)while (i n){ cout<<i<“ ”;
i++; }
22
1 Giới thiệu ngôn ngữ C++ (tt)
Ví dụ 2: Viết CT nhập số nguyên dương n In
ra màn hình n số nguyên dương lẻ đầu tiên
ra màn hình n số nguyên dương lẻ đầu tiên
1 Giới thiệu ngôn ngữ C++ (tt)
Ví dụ 3: Viết CT nhập số nguyên dương n Cho biết n có là số nguyên tố không
biết n có là số nguyên tố không
#include<iostream.h>
void main()
{ int i, n; cout<<“nhap so nguyen duong:”; cin>>n;
if (n>1) { i=2;
hile (n % i ! 0) i++
while (n % i !=0) i++;
if (i==n) cout<<n<<“ la nguyen to”;
else cout<<n<<“ khong nguyen to”;
} else cout<<n<<“khong nguyen to”; }
Trang 71 Giới thiệu ngôn ngữ C++ (tt)
1 Giới thiệu ngôn ngữ C++ (tt)
Ví dụ 2: Viết CT lặp lại nhiều lần việc nhập 1 số nguyên x Việc nhập kết thúc khi x=0 Cho biết
có bao nhiêu số âm và số dương đã nhập
if (x<0) sa++; } while (x!=0);
cout<<“\n So so duong:<<sd;
cout<<\n So so am:<<sa; }
26
1 Giới thiệu ngôn ngữ C++ (tt)
Ví dụ 2: Viết CT lặp lại nhiều lần việc nhập 1 số
nguyên x Việc nhập kết thúc khi x=0 Cho biết
có bao nhiêu số đã nhập
#include<iostream.h>
void main()
}
1 Giới thiệu ngôn ngữ C++ (tt)
Ví dụ 3: Viết CT lặp lại nhiều lần việc nhập 1 số thực x Việc nhập kết thúc khi không muốn nhập nữa Cho biết có bao nhiêu số thực đã nhậpnữa Cho biết có bao nhiêu số thực đã nhập
#include<iostream.h>
void main()
{ float x; int so=0; char Traloi;
do { cout<<“nhap so thuc:”; cin>>x;
so++;
cout<<“Nhap so thuc tiep khong (T/K):”;
cin>>Traloi;
} while (Traloi==‘T’ ||Traloi==‘t’ );
cout<<“\n So so thuc da nhap:<<so;
Trang 81 Giới thiệu ngôn ngữ C++ (tt)
2- Lập trình hướng đối tượng là gì
• Lập trình hướng đối tượng (Object
Oriented programming - OOP) là khuynh hướng lập trình lấy đối tượng làm nền tảng để xây dựng thuật giải xây dựng chương trình.
• Thực chất đây không phải là 1 phương Thực chất đây không phải là 1 phương pháp lập trình mới mà là một cách nhìn mới trong lập trình.
30
2- Lập trình hướng đối tượng là gì(tt)
• Theo lập trình hướng cấu trúc (thủ tục):
CTDL + Thuật giải = Chương trình
• Theo lập trình hướng đối tượng
Phương thức + Dữ liệu = Đối tượng
3- Các ngôn ngữ và ứng dụng OOP
• Xuất phát từ tư tưởng của ngôn ngữ SIMULA67(phát triển vào năm 1960)
(phát triển vào năm 1960)
• Trung tâm nghiên cứu Palo Alto của hãngXEROX đã tập trung 10 năm nghiên cứu đểhoàn thiện ngôn ngữ OOP đầu tiên với tên gọiSMALLTALK
• Các ngôn ngữ OOP lần lượt ra đời: EIFFEL,CLOS, LOOPS, FLAVORS, OBJECT PASCAL,OBJECT C, C++, DELPHI, JaVa, C#, Java#
Trang 93- Các ngôn ngữ và ứng dụng OOP(tt)
• Chính XEROX, trên cơ sở ngôn ngữ OOP của
mình đã đề ra tư tưởng giao tiếp hình tượng
trên màn hình (icon base screen interface)
• Apple Macintosh, Microsoft Windows phát triển
giao tiếp đồ hoạ như hiện nay
• Microsoft Windows: ta luôn thực hiện cùng mộtMicrosoft Windows: ta luôn thực hiện cùng một
công việc: “đưa trỏ chuột vào đối tượng rồi nhấn
trái chuột” Mỗi đối tượng có thể là: Control
Menu, Control Menu Box, Title Bar,…sẽ đáp
ứng công việc tuỳ theo đặc tính của mình
33
4- Sự đóng kín (Encapsulation)
• Sự đóng kín: Cơ chế liên kết mã và dữ liệu
mà nó thao tác, giữ cho cả 2 được an toàn khỏi sự can thiệp từ bên ngoài hoặc do sử dụng sai
Mã + Dữ liệu
• Trong 1 đối tượng: mã hoặc dữ liệu hoặc cả
2 có thể là của riêng đối tượng đó hoặc chung
34
4- Sự đóng kín (tt)
• Nếu mã hoặc dữ liệu làriêng thì nó chỉ có thể
được truy cập bởi bộ phận của đối tượng,
không được truy cập bởi thành phần khác
của chương trình tồn tại ngoài đối tượng
• Khi mã hoặc dữ liệu là chung, các bộ phận
khác của CT vẫn có thể truy cập được nó
• Các thành phần chung của đối tượng: cung
cấp 1 giao diện có điều khiển cho các thành
phần riêng của đối tượng
• Trong lớp tác động tổng quát 1 tác động cụ
• Trong lớp tác động tổng quát, 1 tác động cụ thể được xác định bởi loại dữ liệu
• Ví dụ: Hàm abs(n) trong C++
Trang 105- Tính đa hình (tt)
• Khái niệm tính đa hình chính là ý tưởng 1
giao diện nhiều phương pháp
giao diện nhiều phương pháp.
• Ưu điểm của tính đa hình: giảm tính phức
tạp.
• Tính đa hình được áp dụng cho hàm và
toán tử: Quá tải hàm; Quá tải toán tử.
37
6- Tính thừa kế (Inheritance)
• Tính thừa kế: Quá trình 1 đối tượng có thể
có được các tính chất của đối tượng khác.
• Một đối tượng có thể kế thừa các tính chất tổng quát để bổ sung thêm các đặc điểm của nó.
Đối tượng B giống đối tượng A có
• Nếu B không thừa kế A: Khi xây dựng B
ta phải xây dựng cả 3 hàm nhap, xuat và
7- Phương thức ảo (Virtual method)
dung cụ thể vào lúc thực hiện CT.g
• Khi biên dịch, đoạn CT của phương thức ảo sẽ được đưa vào bảng các phương thức
ảo(Virtual method table – VMT)
• Khi CT thực hiện, các phương thức ảo sẽKhi CT thực hiện, các phương thức ảo sẽ được gọi từ bảng phương thức ảo này
• Đây là kỹ thuật kết nối động(dynamic binding) – kết nối trễ(late binding)
Trang 11Bài tập chương 1
1 Viết chương trình tính n!
2 Viết chương trình tính tổng n số nguyên g g g y
dương chẵn đầu tiên
3 Viết chương trình tính tổng n số nguyên
dương lẻ đầu tiên
4 Viết chương trình tìm ước số chung lớn
nhất của 2 số nguyên dương m n
nhất của 2 số nguyên dương m,n
5 Viết chương trình nhập 1 số nguyên từ 1
đến 12 Cho biết tháng tương ứng với số có
bao nhiêu ngày
41
Chương 2: Lớp và thực thể
1.Lớp và thực thể 2.Hàm tạo – Hàm huỷ 3.Con trỏ đối tượng 4.Các hàm nội tuyến 5.Gán – Truyền – Trả đối tượng về từ hàm 6.Giới thiệu các hàm friend
42
1- Lớp và thực thể
được định nghĩa trong CT.
lớp Muốn sử dụng lớp phải khai báo đối tượng thuộc lớp
• Định nghĩa lớp:
class <tên lớp>
{ // dữ liệu//phương thức, hàm thành phần};
<kiểu trả về> <tên lớp>::<tên hàm>(đối số){ //thân hàm
[ return <giá trị trả về>;]
Trang 121- Lớp và thực thể(tt)
• Khai báo đối tượng thuộc lớp:
<tên lớp> <tên đối tượng>;
Các phương thức: nhap, xuat
class sample
{ int a;
public:
void nhap() { cout<<“nhap a:”; cin>>a; }o d ap() { cou ap a ; c a; }
void xuat() { cout<<“a=“<<a; }
Các phương thức: nhap, xuat
class sampleclass sample { int a, b;
public:
void nhap();
void xuat();
};
void sample:: nhap(){ cout<<“nhap a b:”; cin>>a>>b; }
void sample:: nhap() { cout<< nhap a,b: ; cin>>a>>b; }
void sample::xuat() { cout<<“a=”<<a<<“; b=” <<b; } void main()
{ sample ob; ob.nhap(); ob.xuat(); }
• Phương thức thiết lập(PTTL) là phương thức
đặc biệt của lớp nhằm thực hiện các công việc
ban đầu như: cấp phát vùng nhớ, khởi tạo giá
trị ban đầu, mở tập tin…
• Ví dụ1 Ví dụ1::
class sample { int a;
public: sample(){a=0; cout<<“constructor”;}
…
};
2- Hàm tạo – Hàm huỷ(tt)
• Ví dụ 2: class sample { i t b bli{ int a, b; public:
sample(){a=b=0; cout<<“constructor”;}
sample(int x){a=b=x; cout<<“constructor”;}
sample(int x, int y) {a=x; b=y;
cout<<“constructor”;} ;}
nhap() { cout<<“nhap a,b:”; cin>>a>>b; }void xuat() { cout<<“a=”<<a<<“; b=” <<b; } };
Trang 13• Hàm huỷ - Phương thức huỷ bỏ (Destructor)
• Phương thức huỷ bỏ (PTHB) là phương thứcPhương thức huỷ bỏ (PTHB) là phương thức đặc biệt của lớp nhằm thực hiện các công việc như: thu hồi vùng nhớ, đóng tập tin đã mở
• Ví dụ:
class sample{ int a;
public:
sample() {cout<<“\n Constructor”;} //PTTL
~ sample() {cout<<“\n Destructor”;} //PTHB};
– Không có giá trị trả về
– Không có tham số nào
Một lớp có thể không có hoặc có 1 PTHB
– Một lớp có thể không có, hoặc có 1 PTHB
– PTHB được tự động gọi khi kết thúc sự tồn tại
của đối tượng thuộc lớp
3- Con trỏ đối tượng
• Truy các thành viên của đối tượng: dùng toán
tử chấm điểm ( )
tử chấm điểm (.)
• Dùng toán tử -> để truy cập thành viên của đối tượng: cần khai báo con trỏ đối tượng
• Cú pháp: <tên lớp> *<tên đối tượng>;
• VD: sample *ob1, ob2;
ob1=&ob2;
ob1->xuat();
Trang 14các thủ tục bổ sung kết hợp với gọi hàm các thủ tục bổ sung kết hợp với gọi hàm
và cơ chế trả về.
Tuỳ vào trình biên dịch, có nhiều hạn chế
áp dụng cho hàm nội tuyến.
Nếu 1 hạn chế nội tuyến bị vi phạm, trình biên dịch sẽ tạo ra 1 hàm bình thường.
Không có lệnh nhảy goto
Không có lệnh gọi đệ quy
4- Các hàm nội tuyến(tt)
class sample{ int a,b;
public:
sample(int x, int y);
long square();
};
inline sample::sample(int x, int y) { a=x; b=y;}
inline long sample::square() { return a*a+b*b;
}
Trang 155- Gán – Truyền – Trả đối
tượng về từ hàm
• Các đối tượng có thể được sử dụng ợ g ợ ụ g
tương tự các biến kiểu bất kỳ.
• Có thể thực hiện gán các đối tượng cùng
kiểu mà vùng dữ liệu của nó thuộc kiểu có
thể thực hiện được phép toán gán ự ệ ợ p p g
• Đối tượng có thể: đối số hàm, kết quả trả
về của 1 hàm
57
5- Gán – Truyền – Trả đối tượng về từ hàm(tt)
• Ví dụ:
class Toado{ int x, y; public:
void nhap() { cin>>x>>y; }void xuat() {cout<<“(“<<x<<“,”<<y<<“)”;}
Toado cong(Toado ob1, Toado ob2){ Toado tempt;
tempt x=ob1 x+ob2 x; void main()
tempt.x=ob1.x+ob2.x;
tempt.y=ob1.y+ob2.y;
return tempt ;}
6- Giới thiệu các hàm friend
• Một hàm nếu không là hàm thành viên của lớp
sẽ không truy cập được các thành phần riêng
sẽ không truy cập được các thành phần riêng
của lớp
• Một loại hàm trong C++ hỗ trợ truy cập được
các thành phần riêng của lớp: hàm friend
• Hàm friend không là hàm thành phần của lớp.Hàm friend không là hàm thành phần của lớp
• Hàm friend được định nghĩa giống hàm bình
thường nhưng phần khai báo bên trong lớp có
public:
myclass() { a=0; } myclass(int x) { a=x; }
id h () { t }
() { myclass ob(4), ob(6);
cout<< sqr(ob1) <<endl;
cout<< sqr(ob2) <<endl;
ob1.show();
cout<<“\n”;
ob2.show();
void show() { cout<<a; }
friend long sqr(myclass ob);
};
long sqr(myclass ob) { return ob.a*ob.a; }
}
Trang 166- Giới thiệu các hàm friend(tt)
• Ví dụ 2: Hàm friend của nhiều hơn 1 lớp
class struck;
class car
{ int num, speed;
public:
void get(int a, int b) { num=a;speed=b; }
void put() { cout<<“num:”<<num;
cout<<“speed:”<<speed; }
friend int greater(car ob1, struck ob2); };
61
6- Giới thiệu các hàm friend(tt)
• Ví dụ 2: Hàm friend của nhiều hơn 1 lớp(tt)
6- Giới thiệu các hàm friend(tt)
• Ví dụ 2: Hàm friend của nhiều hơn 1 lớp(tt)
int greater(car ob1, struck ob2)
{ if (ob1.speed >ob2.speed) return 1;
else return 0;
}
void main()
{ car ob1; struck ob2; ob1 input(); ob2 input();
if (greater(ob1,ob2)) cout<<“car is greater than
struck”;
else cout<<“struck is greater than or equal to car”;
}
Bài tập chương 2
1 Xây dựng lớp SOPHUC gồm 2 vùng dữ liệu:
thực, ảo Các phương thức Nhap, Xuat Viết hàm main minh họa
2 Xây dựng lớp HOCSINH gồm các vùng dữ liệu: Mã số (4 kí tự), Họ tên, DTB Các phương thức Nhap (để nhập thông tin của học sinh) Phương thức Xuat (in thông tin ọ ) g ( gcủa học sinh trên 1 dòng) Viết chương trình nhập danh sách N học sinh In danh sách N học sinh ra màn hình
Trang 17Bài tập chương 2(tt)
3 Xây dựng lớp PHANSO gồm 2 vùng dữ liệu:
tử và mẫu Các phương thức: Nhập, Xuất để
nhập xuất dữ liệu phân số Phương thức
cộng, trừ để cộng trừ 2 phân số Phương
thức tối giản để tối giản 1 phân số Viết hàm
main minh họa
4 Xây dựng lớp HINHCHUNHAT gồm 2 vùng
dữ liệu: Chiều dài, chiều rộng Phương thức:
Nhập để nhập giá trị chiều dài, chiều rộng
Phương thức Xuất để vẽ hình chữ nhật bằng
các dấu * Viết hàm main
65
Chương 3: Quá tải hàm
• Quá tải hàm tạo
• Quá tải hàm tạo.
• Sử dụng các đối số mặc định.
• Sự quá tải và tính không xác định.
66
1- Quá tải hàm tạo
toado(int a) { x=y=a; }
toado(int a, int b) { x=a; y=b; }
pubic: void xuat() {cout<<"("<<x<<","<<y<<")";}
};
void main(){ toado ob1,ob2(5),ob3(6,7);
ob1.xuat(); ob2.xuat();ob3.xuat();
}
Trang 183- Sự quá tải và tính không xác định
toado(int a) { x=a; y=0; }
toado(int a=0 int b=0) { x=a; y=b; }
};
void main()
{ toado ob1,ob2(5),ob3(6,7); }
69
3- Sự quá tải và tính không xác định(tt)
• Kiểu dữ liệu
float f1(float a) { a++; return a;}
double f1(double a) { a++; return a;}
void main() { float x=12.34; double y=12.34;
cout<<f1(x); cout<<f1(y);
cout<<f1(10); //ambiguity }
70
3- Sự quá tải và tính không xác định(tt)
}
Trang 19• PTTL 1 đối số: khởi tạo giá trị cho 2 vùng dữ
liệu là giá trị của đối số
• PTTL 2 đối số: khởi tạo giá trị cho 2 vùng dữ ạ g ị g
liệu là giá trị tương ứng của 2 đối ô1
• Xuất: In ra màn hình giá trị thực ảo theo dạng
3 Xây dựng hàm hoán vị để hoán đổi nội
dung của 2 số nguyên 2 số thực và 2 số
dung của 2 số nguyên, 2 số thực và 2 số
nguyên dài Viết hàm main minh họa
4 Xây dựng hàm nhập để nhập giá trị n phần
tử nguyên, n phần tử thực Xây dựng hàm
ất để i à hì h iá t ị á hầ tử
xuất để in ra màn hình giá trị các phần tử
của mảng n số nguyên, n số thực Viết hàm
main minh họa
Chương 4: Quá tải toán tử
1 Toán tử đơn nguyên g y
2 Toán tử nhị nguyên
3 Toán tử quan hệ luận lý
Trang 201- Toán tử đơn nguyên
• Dùng hàm friend:
friend void operator<toántử>(<tên lớp> &<tên đối tượng>)
friend void operator<toántử>(<tên lớp> &<tên đối tượng>)
{ //thân hàm
}
{ int x,y; public:
void nhap(){cout<<"nhap x y:"; cin>>x>>y;}
1- Toán tử đơn nguyên(tt)
• Dùng hàm thành phần:
<tên lớp> operator<toántử>() { // thân hàm
return *this; }
{ int x,y; public:
void nhap(){cout<<"nhap x,y:"; cin>>x>>y;} p(){ p ,y ; y;}
void xuat(){cout<<"("<<x<<","<<y<<")";}
toado operator++() { this->x++; this->y++;
friend <tên lớp> operator#(<tên lớp> <tên đối tượng 1>,
<tê lớ > <tê đối t 2>)
<tên lớp> <tên đối tượng 2>) { //thân hàm
tam.x = ob1.x + ob2.x;
tam.y = ob1.y + ob2.y;
Trang 213- Toán tử quan hệ luận lý
• Dùng hàm friend:
<tên lớp> <tên đối tượng 2>){ /* thân hàm */ }
3- Toán tử quan hệ luận lý(tt)
1 Quá tải toán tử +, - cho lớp SOPHUC để
thực hiện việc cộng, trừ 2 số phức Quá g
tải toán tử ++ để tăng giá trị phần thực
và phần ảo lên 1 đơn vị.
2 Quá tải toán tử +, - cho lớp PHANSO để
thực hiện việc cộng, trừ 2 phân số Quá
tải toán tử ++ để tăng giá trị phân số lên
tải toán tử ++ để tăng giá trị phân số lên
1 đơn vị.
Bài tập chương 4(tt)
3 Quá tải toán tử +, - cho lớp TOADO để thực hiện việc cộng, trừ 2 toạ độ Quá tải g toán tử ++ để tăng giá trị tọa độ x và y lên 1 đơn vị.
4 Quá tải toán tử ++ cho lớp HINHCHUNHAT để thực hiện việc tăng chiều dài và chiều rộng của hình chữ chiều dài và chiều rộng của hình chữ nhật lên 1 đơn vị.
Trang 22Chương 5: Tính thừa kế
1 Điều khiển truy cập lớp cơ sở
2 Sử dụng các thành viên được bảo vệ
3 Hàm tạo – Hàm hủy và tính kế thừa
4 Tính đa thừa kế
5 Các lớp cơ sở ảo
85
1- Điều khiển truy cập lớp cơ sở
1 Dạng tổng quát:
{ // thân lớp};
protectedpublic
86
1- Điều khiển truy cập lớp cơ sở(tt)
Ví dụ 1 :
{ int x;
public:
void setx ( int a ) { x=a; }
void showx () { cout<<x<<”\n”; }
};
class derived : public base
main() { derived ob;
void sety ( int a ) { y=a; }
void showy () { cout<<y<<”\n”; }
};
return 0;
}
1- Điều khiển truy cập lớp cơ sở(tt)
Ví dụ 2 : Tìm và sửa lỗi chương trình sau
(không thay đổi thuộc tính thừa kế): main()class base
{ int x;
public:
void setx ( int a ) { x=a; } void showx () { cout<<x<<”\n”; } };
main() { derived ob;
y();
return 0;
}
Trang 232- Sử dụng các thành viên được bảo vệ
1.Thuộc tính protected:
- Khi các thành phần thuộc lớp cơ sở có
thuộc tính riêng (private), lớp dẫn xuất
không truy cập được các thành phần này.
- Để lớp dẫn xuất truy cập được những
public:
void setab ( int x, int y ) { a=x ; b=y ; } void getab ( int &x, int &y ) { x=a ; y=b ; } };
class derived: public base class derived: public base { int c; public:
void setc( int x) { c=x ;}
void getc( int &x) { x=c ;}
void show(){ cout<<a<<b<<c<<”\n” ; } };
90
2- Sử dụng các thành viên được bảo vệ(tt)
2- Sử dụng các thành viên được bảo vệ(tt)
Ví dụ 2: Tìm và sửa lỗi chương trình sau (không thay đổi thuộc tính thừa kế):
void setc( int x) { c=x ;}
void getc( int &x) { x=c ;}
void show(){ cout<<a<<b<<c<<”\n” ; } };
Trang 242- Sử dụng các thành viên được bảo vệ(tt)
3- Hàm tạo – Hàm hủy – Tính kế thừa
- Khi lớp cơ sở và lớp dẫn xuất có các hàmp ptạo, hàm hủy thì các hàm tạo được thi hànhtheo thứ tự dẫn xuất; các hàm hủy được thihành theo thứ tự ngược lại
- Khi lớp cơ sở có phương thức thiết lậpđược truyền đối số thì bắt buộc lớp dẫn xuấtphải có xây dựng phương thức thiết lập đượctruyền đối số để truyền giá trị cho những đối sốcủa phương thức thiết lập thuộc lớp cơ sở
94
- Cú pháp truyền đối số từ lớp dẫn xuất đến
3- Hàm tạo – Hàm hủy – Tính kế thừa
lớp cơ sở như sau:
derived_constructor (arg_list) : base (arg_list)
{
//body of derived class constructor
//body of derived class constructor
base() { cout<<”Base Constructor \n”; }
~base(){ cout<<”Base Destructor \n” ; } };
class derived: public base{ public:
derived(){ cout<<”Drived Constructor \n”; }
~derived(){ cout<<”Drived Desstructor \n”; }};