1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Lập trình hướng đối tượng - Huỳnh Thị Thu Thủy

48 584 0

Đ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

Tiêu đề Bài giảng lập trình hướng đối tượng
Tác giả Trần Văn Lă Lăng, Nguyễn Chí Trung
Người hướng dẫn ThS. Huỳnh Thị Thu Thủy
Trường học Cao Đẳng Công Nghệ Thông Tin TPHCM
Chuyên ngành Lập trình hướng đối tượng
Thể loại Bài giảng
Năm xuất bản 2013
Thành phố TPHCM
Định dạng
Số trang 48
Dung lượng 356,01 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Lập trình hướng đối tượng - Huỳnh Thị Thu Thủy

Trang 1

BÀ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 2

1 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 3

1 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 4

1 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 5

1 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 6

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

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

1 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 9

3- 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 10

5- 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 11

Bà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 12

1- 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 14

cá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 15

5- 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 16

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

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 17

Bà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 18

3- 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 20

1- 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 21

3- 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 22

Chươ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 23

2- 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 24

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

Ngày đăng: 02/06/2014, 07:38

HÌNH ẢNH LIÊN QUAN

2. Bảng phương thức ảo - Bài giảng Lập trình hướng đối tượng - Huỳnh Thị Thu Thủy
2. Bảng phương thức ảo (Trang 43)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w