Bài giảng Kỹ thuật lập trình Ngành Truyền thông đa phương tiện
38
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và truyền thông
Chương 2: Lập trình hướng đối tượng trong C++
2.1 Lớp và đối tượng
2.1.1 Khái niệm, cú pháp khai báo
Lp: Lp thành phần bn của chương trình hướng đối tượng, dùng để đnh
nghĩa đối tưng.
Đối tưng
- Đối tượng là sự thể hiện của lớp.
- Mỗi đối tượng được xác định bởi thuộc tính (dữ liệu, biến) hành vi (phương
thức). Thuộc tính để xác định tính chất riêng của đối tượng, hành vi là hành động
tác động lên đối tượng.
Cú pháp:
//Cú pháp khai báo lp
class tên_lp{
[mức_độ_truy_cp:] Các_thuc_tính
[mức_độ_truy_cp:] c_phương_thức
}[tên_đối_tưng];
//Cú pháp khai báo đi tưng
tên_lớp tên_đối tưng;
- Thuộc tính: như khai báo biến
- Phương thức: như khai báo hàm
Cách truy xut:
Tên_đối_tượng. Tên_thuộc_tính
Tên_đối_tượng. Tên_phương_thức
2.1.2 Mức độ truy cập
- Private: ch cho phép các hàm trong lp truy cp đến thành phn y, các lp khác
không th truy cp.
- Public: đưc phép truy cp t mi lp.
- Protected: cho phép các thành viên ca cùng mt lp hoc t mt lp dn xut ca
nó.
- Khi không t khóa truy cp thì toàn b c thành viên ca lớp đưc hiu mc
định là có thuc tính private.
class A
{
//mac dinh la private
int x;
class B
{
void h()
{
Bài giảng Kỹ thuật lập trình Ngành Truyền thông đa phương tiện
39
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và truyền thông
void g()
{
/*g() trong cùng lớp A với x nên g()
truy xuất đươc x*/
x++;
}
public:
int f()
{
x=1; //truy xuat tp private
g();
return x;
}
};
A a;
a.x++;//sai vì x là private của A
}
};
int main()
{
A a;
a.g(); //sai vì g là private của A
cout<<a.f(); //đúng vì f() là public
của A
}
Ví d: Viết chương trình tính điểm trung bình bng cách thiết kế lp sinh viên có
các thuộc tính hoten, đim thuyết, điểm thực hành và các phương thc
nhp, xuất, tính điểm trung bình.
using namespace std;
class sinhvien
{
private:
char hoten[30];
float dlt,dth; //cac thuoc tinh
public:
void nhap() //phuong thuc nhap
{
cout<<"Nhap ho ten:"; cin>>hoten;
cout<<"Nhap dlt:"; cin>>dlt;
cout<<"Nhap dth:"; cin>>dth;
}
float tinhdtb()
{
return (dlt+dth)/2;
}
void xuat(float dtb)
{
cout<<"\n"<<"Ho ten: "<<hoten;
cout<<"\n"<<"Dlt: "<<dlt;
cout<<"\n"<<"Dth: "<<dth;
Bài giảng Kỹ thuật lập trình Ngành Truyền thông đa phương tiện
40
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và truyền thông
cout<<"\n"<<"Dtb: "<<dtb;
}
};
void main()
{
sinhvien sv;
sv.nhap();
float dtb=sv.tinhdtb();
sv.xuat(dtb);
system("pause");
}
Có th b sung các phương thc vào trong lp theo 2 cách: b sung trc tiếp (ví d
trên) hoc khai báo prototype (s dng toán t phm vi :: theo sau tên lp).
using namespace std;
class sinhvien
{
private:
char hoten[30];
float dlt,dth; //cac thuoc tinh
public:
void nhap();
void xuat(float);
float tinhdtb();
};
void sinhvien::nhap() //phuong thuc nhap
{
cout<<"Nhap ho ten:"; cin>>hoten;
cout<<"Nhap dlt:"; cin>>dlt;
cout<<"Nhap dth:"; cin>>dth;
}
float sinhvien::tinhdtb()
{
return (dlt+dth)/2;
}
void sinhvien::xuat(float dtb)
{
cout<<"\n"<<"Ho ten: "<<hoten;
cout<<"\n"<<"Dlt: "<<dlt;
cout<<"\n"<<"Dth: "<<dth;
Bài giảng Kỹ thuật lập trình Ngành Truyền thông đa phương tiện
41
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và truyền thông
cout<<"\n"<<"Dtb: "<<dtb;
}
2.1.3 Hàm tạo (Constructor), Hàm hủy (Destructor)
Hàm tạo
- Khi to giá tr ban đầu cho các thành viên ca class
- Đưc gi t động mỗi khi đối tượng đưc to ra
- Hàm to không có kiu d liu tr v
- Trùng vi tên lp và là hàm thành viên ca lp
- Có th có tham s hoc không.
using namespace std;
class VD{
private:
int a,b;
public:
VD()
{
a=18;
b=27;
}
VD(int x, int y)
{
a=x;
b=y;
}
void show()
{
cout<<"a= " <<a<<" b= "<<b << "\n";
}
};
int main(){
VD o1;
o1.show();
VD o2(2,3);
o2.show();
system("pause");
}
Hàm hủy
Bài giảng Kỹ thuật lập trình Ngành Truyền thông đa phương tiện
42
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và truyền thông
- Gii phóng b nh trưc khi kết thúc công vic vi đi tượng đó.
- Có tên trùng vi hàm khi tạo nhưng thêm dấu ~ trước tên hàm.
- Không có tham s.
- Trong chương trình chính ta không gi hàm giải phóng nhưng hàm này vẫn được
thc hin.
~VD()
{
cout <<"Giai phong doi tuong \n" ;
}
2.1.4 Sử dụng lớp, đối tượng
Mảng, biến đối tượng
Mt lớp (sau khi định nghĩa) th xem như một kiu d liu th dùng để
khai báo các biến, mng đối tượng. Cách khai báo biến mảng đối ợng cũng như
nhng kiu d liu chun ca C++.
Khai báo:
- Tên_lp danh_sách_biến;
- Tên lp danh_sách_mng;
Ví d:
Sinhvien sv1, sv2, sv3; // khai báo 3 biến đối tượng sv1, sv2, sv3
Sinhvien sv[20]; // khai báo mảng đi tưng sv gm 20 sinh viên
Mỗi đối tưng sau khi khai báo s đưc cp phát mt vùng nh riêng để cha các
thuc tính ca chúng. Chú ý rng s không vùng nh riêng để cha các phương
thc cho mi đi tưng.
Truy xut:
- Thuc tính: tên_đối_tượng.tên_thuc_tính
- Phương thức: tên_đối_tượng.tên_phương_thức
To mảng các đối tượng t ví d trên:
VD o[MAX];
for (int i=0; i<MAX; i++)
{
o[i].input();
cout<<"\n";
}
for (int i=0; i<MAX; i++)
o[i].show();