Bài giảng môn Lập trình - Chương 4: Lớp và đối tượng

Lập trình  
Chương 4: Lớp và đối tượng  
2/10/2017  
Nội dung  
. 4.1 Khái niệm  
. 4.2 Định nghĩa lớp  
. 4.3 Biến thành viên  
. 4.4 Hàm thành viên  
. 4.5 Kiểm soát truy nhập  
. 4.6 Bài tập phần 1  
. 4.7 Hàm tạo và hàm hủy  
. 4.8 Hàm tạo bản sao  
. 4.9 Hàm toán tử gán  
. 4.10 Thành viên tĩnh  
. 4.11 Nạp chồng toán tử  
. 4.12 Khai báo friend  
2
Chương 4: Lớp và đối tượng  
4.1 Khái niệm  
. Đối tượng là gì?  
– Mô hình đại diện của một đối tượng vật lý:  
Person, student, employee, employer  
Car, bus, vehicle,…  
– Đối tượng logic  
Trend, report, button, window,…  
. Một đối tượng có:  
– Các thuộc tính  
– Trạng thái  
– Hành vi  
– Căn cước  
– Ngữ nghĩa  
3
Chương 4: Lớp và đối tượng  
Lớp là gì?  
. Là sự thực thi của các đối tượng có chung các thuộc  
tính, hành vi, quan hệ, ngữ nghĩa.  
. Lớp là một kiểu dữ liệu mới có cấu trúc, trong đó việc  
truy nhập các biến thành viên được kiểm soát thông  
qua các hàm thành viên.  
. Các dữ liệu của lớp biến thành viên  
. Các hàm của lớp hàm thành viên  
. Một biến của một lớp một đối tượng  
4
Chương 4: Lớp và đối tượng  
4.2 Định nghĩa lớp  
. Kiểu dữ liệu có cấu trúc  
sruct Date{  
//sử dụng  
void main(){  
int day, month, year;  
Date d;  
set_date(d,32,13,2010);  
add_day(d,5);  
};  
void set_date(Date& date,int d, int m, int y){  
date.day = d;  
date.month = m;  
date.year = y;  
add_year(d,1);  
d.month = 13;  
}
}
void add_day(Date& date, int n){  
date.day += n;  
...  
}
Truy nhập biến  
thành viên từ  
bên ngoài  
void add_month(Date& date, int n) ){  
date.month += n;  
...  
}
void add_year(Date& date, int n) ){  
date.year += n;  
}
5
Chương 4: Lớp và đối tượng  
Các vấn đề với struct  
. Truy nhập trực tiếp vào các biến thành viên của cấu  
trúc không an toàn  
. Khi có sự thay đổi tên của các biến thành viên   
người sử dụng phải thay đổi lại mã chương trình ứng  
dụng  
– Ví dụ: thay đổi lại cấu trúc Date  
sruct Date{  
int d, m, y;  
};  
– Thì đoạn mã sau sẽ có lỗi không biên dịch  
Date d;  
d.month = 10;  
6
Chương 4: Lớp và đối tượng  
Lớp hóa  
. Định nghĩa lớp Date  
Tên lớp  
class Date{  
int day;  
int month;  
int year;  
public:  
Biến thành viên  
Kiểm soát quyền  
truy nhập  
void set_date(int d, int m, int y){  
day = d;  
month = m;  
year = y;  
}
int get_day() { return day; }  
int get_month() { return month; }  
Hàm thành viên  
int get_year() { return year; }  
void add_year(int n) ){  
year += n;  
}
...  
};  
7
Chương 4: Lớp và đối tượng  
. Sử dụng lớp Date  
Đối tượng  
void main(){  
Date d;  
d.set_date(1,1,2010);  
d.add_year(10);  
Có lỗi.  
d.day = 10; //??  
d.month = 10; //??  
d.year = 2009;//??  
int i = d.day;//??  
int day = d.get_day();  
int month = d.get_month();  
int year = d.get_year();  
}
day, month, year là  
các biến thành viên  
của Date thuộc kiểu  
không được phép  
truy nhập từ bên  
ngoài (kiểu private)  
8
Chương 4: Lớp và đối tượng  
. Thay đổi tên biến thành viên của lớp  
//Sử dụng  
class Date{  
void main{  
int d;  
int m;  
int y;  
Date d;  
d.set_date(1,1,2010);  
d.add_year(10);  
public:  
int day = d.get_day();  
int month = d.get_month();  
int year = d.get_year();  
void set_date(int _d, int _m, int _y){  
d = _d;  
m = _m;  
y = _y;  
}
}
int get_day() { return d; }  
int get_month() { return m; }  
int get_year() { return y; }  
void add_year(int n) ){  
Có sự khác  
biệt  
year += n;  
}
...  
không?  
};  
9
Chương 4: Lớp và đối tượng  
4.3 Biến thành viên  
. Khai báo biến thành viên của lớp  
class Date{  
int day,month, year; //khai báo tưng tự như cấu trúc  
...  
};  
. Mặc định các biến thành viên không truy nhập được từ bên  
ngoài  
Date d;  
d.day = 10;;  
//Lỗi, vì biến thành viên day của Date thuộc kiểu private  
. Có thể cho phép biến thành viên truy nhập từ bên ngoài bằng  
cách chuyển thành biến public. Tuy nhiên, ít khi sử dụng như  
vậy vì không còn che giấu dữ liệu  
class Date{  
public:  
int day,month, year; //truy nhập được từ bên ngoài  
...  
};  
10  
Chương 4: Lớp và đối tượng  
. Truy nhập các biến thành viên thông qua các hàm  
thành viên  
class Date{  
int day, month,year;  
public:  
Hàm thành viên  
để truy nhập biến  
thành viên  
int get_day()  
{
return day; }  
void set_day(int d){ day = d;  
}
};  
. Khởi tạo biến thành viên thông qua hàm tạo  
class Date{  
int day, month,year;  
public:  
Date(int d, int m, int y){ //hàm tạo  
day = d; month = m; year = y;  
}
...  
};  
11  
Chương 4: Lớp và đối tượng  
4.4 Hàm thành viên  
. Khai báo và định nghĩa hàm thành viên  
class Date{  
int day, month,year;  
public:  
Khai báo và  
định nghĩa  
int get_day()  
{
return day; }  
void set_day(int d);  
. . .  
Chỉ khai báo,  
không định  
nghĩa  
};  
void Date::set_day(int d){  
day = d;  
}
Định nghĩa bên  
ngoài phần khai  
báo lớp  
. Để che giấu cách thực hiện, hàm thành viên thường được khai  
báo trong tập tin đầu (*.h), phần định nghĩa được thực hiện  
trong tệp tin nguồn (*.cpp). Khi đóng gói thành thư viện, người  
sử dụng chỉ cần tệp tin thư viện (*.lib) và tệp tin đầu (*.h),  
không cần tệp tin nguồn (*.cpp)  
12  
Chương 4: Lớp và đối tượng  
. Khai báo hàm thành viên trong tệp tin đầu (*.h)  
//tệp tin Date.h  
class Date{  
int day, month,year;  
public:  
int get_day();  
void set_day(int d);  
. . .  
};  
. Định hàm thành viên trong tệp tin nguồn (*.cpp)  
//tệp tin Date.cpp  
void Date::set_day(int d){  
day = d;  
}
void Date::get_day(){ return day;}  
13  
Chương 4: Lớp và đối tượng  
Con trỏ đối tượng  
. Sử dụng con trỏ đối tượng  
void main{  
Date d;  
d.set_date(1,1,2010);  
Date *pd = &d;  
pd->set_date(1,1,2010);  
//con trỏ pd trỏ vào đối tượng d  
Date *pd1 = new Date; //cấp phát bộ nhớ, gọi hàm tạo  
pd1->set_day(10);  
. . .  
delete pd1;  
//hủy bộ nhớ  
Date *pd2 = new Date[5];  
for(int i = 0 ;i < 5; i++)  
pd2[i].set_date(1,1,2010);  
. . .  
delete [] pd2;  
}
14  
Chương 4: Lớp và đối tượng  
4.5 Kiểm soát truy nhập  
. private: các thành viên chỉ có thể truy nhập từ các  
thành viên của lớp và từ các bạn bè của lớp  
. public: các thành viên công cộng, truy nhập được ở  
mọi nơi  
. protected: các thành viên không truy nhập được từ  
bên ngoài, nhưng truy nhập được từ lớp dẫn xuất  
Lớp dẫn xuất  
class A{  
protected:  
class B: public A{  
public:  
int a;  
void f();  
void g(){  
f();  
Lớp cơ sở  
};  
}
};  
15  
Chương 4: Lớp và đối tượng  
4.6 Bài tập  
. Xây dựng một lớp tên person để đại diện cho một  
người với các yêu cầu:  
– Tên có độ dài tối đa 50 ký tự  
– Ngày, tháng, năm sinh có kiểu int (hoặc thuộc kiểu Date như  
đã gợi ý trong bài giảng).  
– Quê quán có độ dài tối đa 100 ký tự  
– Hàm nhập tên, ngày sinh, quê từ bán phím  
– Hàm hiển thị thông tin ra màn hình  
– Hàm lấy tên, hàm gán tên  
– Hàm lấy quê quán, hàm gán quê quán  
– Hàm lấy ngày sinh, hàm gan ngày sinh  
– Viết chương trình chính minh họa cách sử dụng  
16  
Chương 4: Lớp và đối tượng  
4.7 Hàm tạo và hàm hủy  
. Vấn đề 1: Nghiên cứu đoạn mã sau  
class Date{  
int day, month,year;  
public:  
int get_day()  
{
return day; }  
void set_day(int d){ day = d;  
}
};  
Câu hỏi:  
d.day = ?  
d.month = ?  
d.year = ?  
void main(){  
Date d;  
int i = d.get_date();  
}
. Làm thế nào để sau khi được tạo ra, đối tượng có  
trạng thái ban đầu theo ý muốn của người sử dụng?  
. Giải pháp: sử dụng hàm tạo  
17  
Chương 4: Lớp và đối tượng  
4.7 Hàm tạo và hàm hủy (…)  
. Vấn đề 2: đối tượng sử dụng bộ nhớ động  
class Array{  
int n;  
int *data; //mảng chứa giá trị các phần tử  
public:  
...  
//số phần tử của array  
};  
. Câu hỏi: làm thế nào để cấp phát bộ nhớ và hủy bộ  
nhớ cho biến thành viên data một cách an toàn  
. Giải pháp: sử dụng hàm tạo và hàm hủy.  
18  
Chương 4: Lớp và đối tượng  
4.7 Hàm tạo và hàm hủy (…)  
. Hàm tạo: luôn được gọi khi đối tượng được tạo ra  
. Hàm hủy: luôn được gọi khi đối tượng bị hủy  
. Cú pháp:  
class A{  
int a, b;  
public:  
A(){a = 0; b = 0;}  
A(int _a){ a = _a;}  
1
2
A(int _a, int _b){ a = _a; b = _b;}  
~A();  
3
};  
. Một lớp có thể có nhiều hàm tạo  
– Hàm tạo 1: hàm tạo không đối  
– Hàm tạo 2: hàm tạo một đối  
– Hàm tạo 3: hàm tạo hai đối  
. Một lớp chỉ có duy nhất một hàm hủy  
Chương 4: Lớp và đối tượng  
19  
. Sử dụng  
void main{  
A a();  
//gọi hàm tạo (?)  
A a1(10); //gọi hàm tạo (?)  
A a2(1,2); //gọi hàm tạo (?)  
//gọi hàm hủy cho ?  
}
void f(A a){  
gọi hàm tạo (?)  
A b(0,0);  
if(...){  
A c;  
...  
}
gọi hàm tạo (?)  
gọi hàm hủy cho ?  
gọi hàm hủy cho ?  
}
void main{  
A *a = new A(10);  
//gọi hàm tạo (?)  
//gọi hàm hủy  
. . . //sử dụng  
delete a;  
}
20  
Chương 4: Lớp và đối tượng  
Tải về để xem bản đầy đủ
pdf 47 trang yennguyen 21480 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng môn Lập trình - Chương 4: Lớp và đối tượng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_mon_lap_trinh_chuong_4_lop_va_doi_tuong.pdf