Bài giảng Lập trình C++ Chương 8: Lớp và đối tượng
1. Địnhnghĩalớphìnhtrònvớicácphươngthứcvàthuộctính
cầnthiết. Sauđó,khaibáomộtbiếnđốitượnghìnhtròn.
Tínhvàhiểnthị ra mànhìnhchuvivàdiệntích củahình tròn.
2. Địnhnghĩalớp Sốphứcvớicácphươngthức vàthuộc tính
cầnthiết. Sauđó,khaibáomảngđốitượng sốphứcgồm5
phầntử. Tínhvàhiểnthị ra mànhìnhtổng của5sốphức đó.
3. Địnhnghĩalớpphânsốgồmcácphươngthứcvàthuộctính
cầnthiết. Sauđó,khaibáohaiđốitượng phânsố. Tínhvà
hiểnthị ramànhìnhtổng vàhiệucủa2phânsốđósaukhi
đãrútgọn.
30 trang |
Chia sẻ: maiphuongtl | Lượt xem: 4241 | Lượt tải: 5
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình C++ Chương 8: Lớp và đối tượng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
1/18Ngôn ngữ lập trình C++
LẬP TRÌNH C++
(3 Tín chỉ)
Gv: Nguyễn Văn Hùng
Khoa: Khoa học máy tính
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 2/29
CHƯƠNG 8: LỚP VÀ ĐỐI TƯỢNG
Mục tiêu
Cung cấp cho sinh viên cách định nghĩa lớp, khai báo
các đối tượng, các loại hàm trong lớp, ...
Nội dung
Định nghĩa lớp
Khai báo đối tượng
Kiểu của phương thức và các tham số
Hàm
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 3/29
- Một định nghĩa lớp gồm 2 thành phần: phần đầu và phần
thân.
- Phần đầu lớp chỉ định tên lớp và các lớp cơ sở
- Phần thân lớp định nghĩa các thành viên lớp
- Có hai loại thành viên:
- Dữ liệu thành viên: Có cú pháp của định nghĩa biến
và chỉ định các đại diện cho các đối tượng của lớp
- Hàm thành viên: Có cú pháp của khai báo hàm và chỉ
định các thao tác của lớp
Định nghĩa lớp
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 4/29
- Các thành viên lớp được khai báo theo một trong 2 chế
độ:
- Các thành viên chung: Sử dụng từ khóa public. Có
thể được truy xuất bởi tất cả các thành phần sử dụng
lớp.
- Các thành viên riêng: Sử dụng từ khóa private. Chỉ
có thể được truy xuất bởi các thành viên lớp.
Định nghĩa lớp
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 5/29
Chú ý:
- Trong C++, các khai báo lớp phổ biến là các dữ liệu
thành viên được khai báo ở chế độ private; và các hàm
thành viên được khai báo ở chế độ public.
- Nếu không quy định cụ thể đó là private hay public thì
C++ hiểu đó là private.
Định nghĩa lớp
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 6/29
- Cú pháp định nghĩa lớp:
class Ten_lop
{
khai báo dữ liệu thành viên của lớp
khai báo hàm thành viên của lớp
};
Ví dụ: Để định nghĩa một lớp đại diện cho các hình chữ nhật.
Phân tích:
- Đặt tên lớp là CHUNHAT
- Các thuộc tính: Chiều dài d và chiều rộng r
- Các phương thức: Nhapdl(), Chuvi(), Dientich()
=> Lớp CHUNHAT được định nghĩa như sau:
Định nghĩa lớp
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 7/29
class CHUNHAT
{
double d, r;
public:
void Nhapdl();
void Chuvi()
{ cout<<"Chu vi la: "<<(d+r)*2<<endl;}
void Dientich();
};
Chú ý: Các hàm thành viên của lớp có thể được định nghĩa bên
trong hoặc ngoài định nghĩa lớp. Tuy nhiên, thường được định
nghĩa bên ngoài (tách biệt) với lớp.
Định nghĩa lớp
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 8/29
void CHUNHAT::Nhapdl()
{
cout>d;
cout>r;
}
void CHUNHAT::Dientich()
{
cout<<"Dien tich = "<<d*r<<endl;
}
Định nghĩa lớp
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 9/29
Nhận xét:
- Nếu phương thức được định nghĩa trong định nghĩa lớp
(hàm thành viên nội tuyến) thì nó được định nghĩa giống
như một hàm thông thường
- Khi xây dựng các phương thức bên ngoài lớp, cần dùng
thêm tên lớp và toán tử phạm vi “::” đặt ngay trước tên
phương phức để quy định rõ đây là phương thức của lớp
nào.
- Giá trị trả về của phương thức có thể có kiểu bất kỳ
Định nghĩa lớp
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 10/29
- Lớp sau khi định nghĩa có thể được xem như một kiểu
đối tượng và có thể dùng để khai báo các biến, mảng, con
trỏ đối tượng.
Cú pháp:
Tên_lớp Danh sách các biến, mảng hoặc con trỏ;
Lúc này, các biến, mảng hay con trỏ được gọi là các đối
tượng (thể hiện) của lớp
Khai báo đối tượng
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 11/29
Ví dụ: Ta có khai báo
CHUNHAT h1, h[5], *cn;
- Mỗi đối tượng sau khi khai báo sẽ được cấp phát vùng
nhớ riêng để chứa các thuộc tính của chúng.
- Không có vùng nhớ riêng để chứa các phương thức cho
mỗi đối tượng, các phương thức sẽ được sử dụng chung
cho tất cả các đối tượng cùng lớp.
Khai báo đối tượng
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 12/29
Thuộc tính của đối tượng:
• Tên thuộc tính luôn đi kèm với tên đối tượng để xác định
đang thao tác với giá trị thuộc tính của đối tượng nào.
• Cú pháp:
− Tên đối tượng.thuộc tính
− Tên con trỏ->thuộc tính
− Tên con trỏ[chỉ số].thuộc tính
Ví dụ:
h1.d; h1.r; ...
Sử dụng phương thức và thuộc tính của lớp
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 13/29
Sử dụng phương thức:
• Cũng giống như thuộc tính, phương thức cũng luôn đi
kèm với tên đối tượng để chỉ rõ phương thức thực hiện
trên các thuộc tính của đối tượng nào.
• Cú pháp:
Tên đối tượng.phương thức([tham số])
Tên con trỏ->phương thức([tham số])
Tên con trỏ[chỉ số].phương thức([tham số])
Ví dụ:
h1.Nhapdl(); h[3].Chuvi(); cn->Dientich()...
Sử dụng phương thức và thuộc tính của lớp
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 14/29
void main()
{ double a, b;
CHUNHAT h1, h[3];
h1.Nhapdl(); h1.Chuvi(); h1.Dientich();
cout<<"*******************************"<<endl;
cout<<"Nhap gia tri cho mang doi tuong"<<endl;
for (int i=0; i<=2; i++)
{ cout<<"Nhap du lieu cho hinh thu "<<i<<endl;
h[i].Nhapdl();
h[i].Chuvi();
h[i].Dientich();
}
}
Ví dụ
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 15/29
Con trỏ this là đối thứ nhất của phương thức.
- C++ sử dụng con trỏ đặc biệt this trong các phương thức.
Do đó, các thuộc tính được sử dụng trong các phương
thức được hiểu là thuộc một đối tượng do con trỏ this trỏ
tới.
- Khi đó, viết:
cin>>d; cin>>r;
Được hiểu là:
cin>>this->d; cin>>this->r;
Con trỏ This
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 16/29
Tham số ứng với đối con trỏ this.
- Tham số truyền cho con trỏ this chính là địa chỉ của đối
tượng đi kèm với phương thức trong lời gọi phương thức.
Chẳng hạn:
h1.Nhapdl();
Thực chất là đã truyền địa chỉ của h1 cho con trỏ this
Con trỏ This
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 17/29
- Phương thức có thể trả về giá trị hoặc không, có thể có
tham số hoặc không.
- Kiểu trả về, kiểu đối của phương thức có thể là kiểu
chuẩn hoặc ngoài chuẩn.
Ví dụ: Xây dựng lớp DIEM và tính độ dài giữa 2 điểm
- Xác định các thuộc tính và phương thức
- Kiểu dữ liệu tương ứng của các thuộc tính và phương
thức
- Các đối và kiểu của đối
Kiểu của phương thức và tham số
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 18/29
- Hàm
- Hàm bạn
- Hàm tạo
- Hàm hủy
Hàm
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 19/29
- Hàm được định nghĩa giống như trong lập trình cấu trúc
- Hàm có phạm vi trong toàn bộ chương trình. Có nghĩa là nó
được gọi từ bất kỳ đâu, kể cả trong các phương thức của lớp
- Đối của hàm có thể là đối tượng
Chẳng hạn:
double Dientich(CHUNHAT h)
{
return h.d*h.r;
}
Hàm
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 20/29
- Nhận xét: Hàm Dientich sẽ bị báo lỗi vì trong thân hàm
không cho phép sử dụng các thuộc tính d, r của đối tượng h.
- Phạm vi sử dụng các phương thức của lớp là toàn chương
trình. Vì thế, có thể gọi các phương thức trong các hàm.
Hàm
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 21/29
- Để một hàm trở thành là hàm bạn của một lớp nào đó ta sử
dụng từ khóa friend ngay trước khai báo hoặc định nghĩa hàm.
- Hàm bạn có thể được định nghĩa trong hoặc ngoài định nghĩa
lớp.
Cú pháp:
Class Ten_lop
{
private: các thuộc tính;
public:
friend kieu_dl Ten_ham1([ds tham so])
{ thân hàm}
friend kieu_dl Ten_ham2([ds kieu tham so]);
};
Hàm bạn
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 22/29
Ví dụ: Cộng 2 số phức
class SOPHUC
{ private: double thuc, ao;
public:
void nhapdl()
{ cout>thuc;
cout>ao;}
SOPHUC sum1(SOPHUC a)
{ SOPHUC tg;
tg.thuc=thuc+a.thuc;
tg.ao=ao+a.ao;
return tg;}
friend SOPHUC sum2(SOPHUC a, SOPHUC b);
};
Hàm bạn
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 23/29
SOPHUC sum2(SOPHUC a, SOPHUC b)
{ SOPHUC tg;
tg.thuc=a.thuc+b.thuc;
tg.ao=a.ao+b.ao;
return tg;
}
Nhận xét:
- Khác với các hàm thông thường, trong thân hàm bạn của một
lớp nào đó cho phép thao tác với các thuộc tính của đối tượng
thuộc lớp đó.
- Tuy nhiên, hàm bạn không phải phương thức của lớp do đó lời
gọi giống như lời gọi hàm thông thường.
Hàm bạn
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 24/29
Chẳng hạn
void main()
{
SOPHUC kq, a, b;
a.nhapdl(); b.nhapdl();
kq=a.sum1(b);
kq=sum2(a,b);
}
- Một hàm có thể là bạn của nhiều lớp.
Hàm bạn
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 25/29
- Hàm tạo cũng là một phương thức của lớp dùng để khởi tạo giá
trị cho một đối tượng mới.
- Hàm tạo có một số đặc điểm sau:
• Tên của hàm tạo: Trùng với tên của lớp
• Hàm tạo không trả về kết quả.
• Không khai báo kiểu trả về cho hàm tạo
• Hàm tạo có thể được xây dựng bên trong hoặc ngoài định nghĩa
lớp.
• Hàm tạo có thể có hoặc không có tham số
• Trong một lớp có thể có nhiều hàm tạo (cùng tên nhưng số tham
số hoặc kiểu khác nhau)
• Nếu lớp không có hàm tạo, chương trình dịch sẽ cung cấp một
hàm tạo mặc định không có tham số. Thực chất hàm này không
làm gì cả.
Hàm tạo
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 26/29
Ví dụ: class CHUNHAT
{
double d, r;
public:
CHUNHAT(double a, double b)
{ d=a; r=b; }
void Chuvi()
{ cout<<"Chu vi la: "<<(d+r)*2<<endl;}
void Dientich();
};
void CHUNHAT::Dientich()
{
cout<<"Dien tich = "<<d*r<<endl;
}
Hàm tạo
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 27/29
void main()
{
double a, b;
cout>a;
cout>b;
CHUNHAT h(a,b), h1=CHUNHAT(a,b);
h.Chuvi(); h1.Chuvi();
h.Dientich(); h1.Dientich();
}
Hàm tạo
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 28/29
• Hàm hủy là một phương thức của lớp, có chức năng ngược
với hàm tạo.
• Tức là hàm huỷ có chức năng giải phóng ra khỏi bộ nhớ một
đối tượng nào đó đang quản lý, xoá đối tượng khỏi màn hình
nếu như nó đang hiển thị . . .
• Các hàm hủy có tên trùng với tên của hàm tạo tương ứng,
nhưng trước tên hàm hủy kèm theo ký tự “~”.
• Nếu trong lớp không có hàm hủy thì chương trình dịch sẽ tự
động tạo ra hàm hủy mặc định không làm gì cả.
Hàm hủy
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 29/29
Đặc điểm:
- Mỗi lớp chỉ có một hàm hủy.
- Kiểu của hàm: Hàm hủy cũng giống như hàm tạo
là hàm không có kiểu, không có giá trị trả về.
- Tên hàm: Tên của hàm hủy gồm một dấu ngã ~
(đứng trước) và tên lớp.
- Tham số: Hàm hủy không có tham số.
Hàm hủy
Ngôn ngữ lập trình C++ Chương 8: Lớp và đối tượng 30/29
1. Định nghĩa lớp hình tròn với các phương thức và thuộc tính
cần thiết. Sau đó, khai báo một biến đối tượng hình tròn.
Tính và hiển thị ra màn hình chu vi và diện tích của hình
tròn.
2. Định nghĩa lớp Số phức với các phương thức và thuộc tính
cần thiết. Sau đó, khai báo mảng đối tượng số phức gồm 5
phần tử. Tính và hiển thị ra màn hình tổng của 5 số phức
đó.
3. Định nghĩa lớp phân số gồm các phương thức và thuộc tính
cần thiết. Sau đó, khai báo hai đối tượng phân số. Tính và
hiển thị ra màn hình tổng và hiệu của 2 phân số đó sau khi
đã rút gọn.
Bài tập
Các file đính kèm theo tài liệu này:
- chuong8c_2011_1171.pdf