Tải bản đầy đủ (.pptx) (76 trang)

Bài giảng lập trình hướng đối tượng dùng c + + chương 3 lớp và đối tượng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (9.62 MB, 76 trang )

Chương 3
Lớp và đối tượng
TRẦN MINH THÁI
Email:
Website: www.minhthai.edu.vn
Cập nhật: 08 tháng 02 năm 2015
#2
Nội dung
1. Khái niệm lớp và đối tượng
2. Toán tử gán
3. Phương thức thiết lập (constructor)
4. Phương thức huỷ (destructor)
5. Con trỏ this
6. Lớp template
#3
Lớp đối tượng là gì? (1/2)
Lớp là khái niệm trung tâm của OOP, là sự mở rộng của khái niệm cấu trúc (struct)
Ngoài thành phần dữ liệu (như cấu trúc), lớp còn chứa các thành phần hàm, còn gọi là
phương thức (method) hay hàm thành viên (member function)
#4
Lớp đối tượng là gì? (2/2)
Lớp được xem như một kiểu dữ liệu (kiểu đối tượng)
Lớp giúp lập trình viên:

Trừu tượng hóa dữ liệu

Đóng gói

và ẩn thông tin
#5
Khai báo lớp (1/2)


Cú pháp
class class_name
{
<thuộc tính truy xuất>: member_list
};
Với member_list là đặc tả các thành viên
Theo quy ước, tên lớp bắt đầu bởi ký tự C
#6
Khai báo lớp (2/2)
Thành viên của lớp gồm

Thành viên dữ liệu (data member) → thuộc tính

Hàm thành viên (member function) → phương thức
class CTime //Lớp thời gian
{
private:
int hour, minute, second;
public:
void SetTime(int h, int m, int s);
void Print();
};
Thuộc nh
Phương thức
#7
Khai báo lớp: thuộc tính (1/5)
Là dữ liệu khai báo trong lớp
Cú pháp giống như khai báo biến
Có thể là một đối tượng nhưng phải khác đối tượng của lớp đang định nghĩa (con trỏ
hay tham chiếu: OK)

Không thể vừa khai báo, vừa khởi tạo
#8
Khai báo lớp: thuộc tính (2/5)
class CTime //Lớp thời gian
{
private:
int hour = 1; // Error
int minute, second;
public:
void SetTime(int h, int m, int s);
void Print();
};
#9
Khai báo lớp: phương thức (3/5)
Hàm khai báo trong lớp (còn gọi là giao diện)
Có thể truy cập các thành viên dữ liệu và hàm thành viên khác
Cài đặt trong lớp  hàm inline
#10
Khai báo lớp: phương thức (4/5)
Cú pháp
type_name class_name :: method_name ( parameter_list )
{

}
Hàm inline → thêm từ khóa inline
#11
Khai báo lớp: cài đặt phương thức (5/5)
class CMyTime
{
private:

int hour, minute, second;
public:
void SetTime(int h, int m, int s);
void Print()
{
cout<<hour <<":"<< minute<<":"<<second<<endl;
}
};
void CMyTime::SetTime(int h, int m, int s)
{
hour = (h>=0 && h<24) ? h:0;
minute = (m>=0 && m<60) ? m:0;
second = (s>=0 && s<60) ? s:0;
}
#12
Thuộc tính truy xuất thành viên (1/3)
(member access specifier)
Xác định phạm vi của các thành viên của lớp có thể được sử dụng trực tiếp từ bên ngoài
phạm vi lớp hay không
Các thuộc tính: private, protected, public
#13
Thuộc tính truy xuất thành viên (2/3)
private (mặc định)
Chỉ được truy xuất từ bên trong lớp
protected
Chỉ được truy xuất từ bên trong lớp hoặc lớp dẫn xuất của nó
public (mặc định đối với thành viên của struct)
Có thể được truy xuất từ bên ngoài lớp
#14
Thuộc tính truy xuất thành viên (3/3)

!!! Các phương thức tiện ích chỉ
được dùng bởi các phương thức
khác trong cùng lớp nên được khai
báo private
class CMyClass
{
private:
int x;
public:
int y;
void Print()
{
cout << x << "," << y << endl;
}
};
void f()
{
CMyClass m;
cout<<m.x; //Error
cout<<m.y; //OK
m.Print(); //OK
}
#15
Sử dụng lớp đối tượng (1/4)
Tạo đối tượng
Sử dụng lớp giống như dùng struct, khai báo một biến lớp (tạo đối tượng) như khai báo
biến struct
Khai báo con trỏ, tham chiếu tới lớp

Có thể khai báo con trỏ/ tham chiếu đến một đối tượng thuộc cùng lớp (truy cập gián

tiếp)

Con trỏ/ tham chiếu không là instance của lớp
#16
Sử dụng lớp đối tượng (2/4)
Gọi hàm thành viên của lớp  truyền
thông điệp cho hàm thành viên đó
CMyTime t1;
CMyTime &t2=t1;
CMyTime *t3 = &t1;
t1.SetTime(12, 5, 5);
t2.Print();
t3->SetTime(1, 5, 7);
t3->Print();
#17
Sử dụng lớp đối tượng (3/4)
Mỗi đối tượng sẽ có một tập các dữ liệu riêng (thuộc tính) được định nghĩa trong lớp
Tuy nhiên, tập các đối tượng thuộc cùng một lớp chỉ có chung duy nhất các định nghĩa
hàm (phương thức)
#18
Sử dụng đối tượng (4/4)
SetTime()
Print()
hour=12
minute=5
second=5
hour=11
minute=15
second=15
Đối tượng t1 Đối tượng t2

CMyTime t1, t2;
t1.SetTime(12, 5, 5);
t2.SetTime(11,15, 15);
t1.Print();
t2.Print();
#19
Toán tử gán (1/2)
Dùng để gán một đối tượng cho một đối
tượng khác của cùng một lớp
Nó được thực hiện bởi toán tử sao chép
thành viên (memberwise copy)
CMyTime t1;
t1.SetTime(12, 5, 5);
t1.Print();
CMyTime t2;
t2 = t1; //memberwise copy
t2.Print();
#20
Toán tử gán (2/2)
Mỗi thành viên của một đối tượng này được sao chép riêng rẽ đến cùng một thành viên
tương ứng của đối tượng khác
Chú ý đối với các thành viên dữ liệu chứa vùng nhớ cấp phát động hoặc con trỏ
#21
Phương thức thiết lập (Constructor) (1/9)
Khởi tạo các thành viên dữ liệu khi đối tượng được tạo ra
Constructor được gọi tự động mỗi khi một instance của lớp được tạo
Constructor thường được dùng để khởi tạo giá trị ban đầu hoặc cấp phát động cho các
thành viên dữ liệu
#22
Phương thức thiết lập (2/9)

Đặc điểm
Constructor có cùng tên với lớp và không có giá trị trả về (kể cả void)
Phải có thuộc tính truy xuất là public
Constructor có thể có tham số (kể cả tham số mặc định) và đa năng hóa
#23
Phương thức thiết lập (3/9)
class CMyTime
{
private:
int hour, minute, second;
public:
CMyTime() //(1)
{
hour=minute=second=0;
}
CMyTime(int h, int m, int s); //(2)
void SetTime(int h, int m, int s);
void Print();
};
CMyTime::CMyTime(int h, int m, int s)
{
SetTime(h, m, s);
}
void CMyTime::Print()
{
cout<<hour <<":"<<minute<<":";
cout<<second<<endl;
}
void CMyTime::SetTime(int h, int m, int s)
{

hour = (h>=0 && h<24) ? h:0;
minute = (m>=0 && m<60) ? m:0;
second = (s>=0 && s<60) ? s:0;
}
void main()
{
CMyTime t1; //gọi constructor (1)
t1.Print();
CMyTime t2(5,15,30);//gọi constructor (2)
t2.Print();
}
#24
Phương thức thiết lập (4/9)
Có ba dạng
Mặc định
Sao chép
Có tham số
#25
Phương thức thiết lập mặc định (5/9)
(Default Constructor)
Không có tham số hoặc tất cả các tham số đều có giá trị mặc định
Mỗi lớp có duy nhất một constructor mặc định
Nếu không định nghĩa thì TBD sẽ tự tạo một constructor mặc định và constructor này
rỗng (không làm gì) → Thành viên dữ liệu sẽ có giá trị “rác”

×