
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
Lớp: Lớp là thành phần cơ bản 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) và 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 lớp
class tên_lớp{
[mức_độ_truy_cập:] Các_thuộc_tính
[mức_độ_truy_cập:] Cá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 xuất:
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 lớp truy cập đến thành phần này, các lớp khác
không thể truy cập.
- Public: được phép truy cập từ mọi lớp.
- Protected: cho phép các thành viên của cùng một lớp hoặc từ một lớp dẫn xuất của
nó.
- Khi không có từ khóa truy cập thì toàn bộ các thành viên của lớp được hiểu mặc
định là có thuộc 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 bằng cách thiết kế lớp sinh viên có
các thuộc tính là hoten, điểm lý thuyết, điểm thực hành và các phương thức là
nhập, 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 thức vào trong lớp theo 2 cách: bổ sung trực tiếp (ví dụ
trên) hoặc khai báo prototype (sử dụng toán tử phạm vi :: theo sau tên lớp).
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
- Khởi tạo giá trị ban đầu cho các thành viên của class
- Được gọi tự động mỗi khi đối tượng được tạo ra
- Hàm tạo không có kiểu dữ liệu trả về
- Trùng với tên lớp và là hàm thành viên của lớp
- Có thể có tham số hoặc 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
- Giải phóng bộ nhớ trước khi kết thúc công việc với đối tượng đó.
- Có tên trùng với hàm khởi 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 gọi hàm giải phóng nhưng hàm này vẫn được
thực hiện.
~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
Một lớp (sau khi định nghĩa) có thể xem như một kiểu dữ liệu và có thể dùng để
khai báo các biến, mảng đối tượng. Cách khai báo biến và mảng đối tượng cũng như
những kiểu dữ liệu chuẩn của C++.
Khai báo:
- Tên_lớp danh_sách_biến;
- Tên lớp danh_sách_mảng;
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 gồm 20 sinh viên
Mỗi đối tượng sau khi khai báo sẽ được cấp phát một vùng nhớ riêng để chứa các
thuộc tính của chúng. Chú ý rằng sẽ không có vùng nhớ riêng để chứa các phương
thức cho mỗi đối tượng.
Truy xuất:
- Thuộc tính: tên_đối_tượng.tên_thuộc_tính
- Phương thức: tên_đối_tượng.tên_phương_thức
Tạo 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();

