You are on page 1of 7

Lớp và đối tượng trong C++

Ngôn ngữ C++ được phát triển từ C lên, nó được bổ sung thêm tính hướng
đối tượng. Các lớp (class) là tính năng trung tâm của C++ mà hỗ trợ lập
trình hướng đối tượng và thường được gọi là các kiểu người dùng tự định
nghĩa (user-defined).

Một lớp được sử dụng để xác định form của một đối tượng và nó kết nối sự
biểu diễn dữ liệu và các phương thức để thao tác các dữ liệu đó vào trong
một package gọn gàng. Dữ liệu và hàm bên trong một lớp được gọi là các
thành viên của lớp đó.

Định nghĩa lớp


Lớp (Class) có thể coi là bản thiết kế của các đối tượng (Object). Nó là
một kiểu dữ liệu do người dùng định nghĩa, chứa các thành viên dữ liệu và
các hàm thành viên của riêng nó.

Ta cùng lấy một ví dụ thực tế nhé:

Hãy cùng xem xét các sinh viên. Mỗi sinh viên đều có thuộc tính chung là:
mã sinh viên, mã sinh viên, tên, tuổi, quê quán, điểm toán, điểm lý, điểm
hoá, đi, đứng, ngồi, học tập, …
Do đó ở đây ta sẽ coi sinh viên là một lớp (Class). Lớp sinhvien sẽ có các
thành viên là: mã sinh viên, tên, tuổi, quê quán, điểm toán, điểm lý, điểm
hoá, … đi, đứng, ngồi, học tập, …

Vì một lớp là một kiểu dữ liệu do người dùng định nghĩa do đó nó sẽ gồm
các thành viên dữ liệu và các hàm thành viên.
Các thành viên dữ liệu là các biến dữ liệu và các hàm thành viên là các
hàm được sử dụng để thao tác các biến này và các thành viên dữ liệu này
và các hàm thành viên xác định các thuộc tính (Attribute) và hành vi
(Method) của các đối tượng trong lớp.

Trong ví dụ trên:
Lớp sinhvien sẽ có các

 Thuộc tính (Attribute) là: mã sinh viên, tên, tuổi, quê quán, điểm
toán, điểm lý, điểm hoá, …
 Hành vi (Trong C++ sẽ gọi là phương thức – Method): đi, đứng,
ngồi, học tập, …
Trong C++, để định nghĩa một lớp ta bắt đầu bằng từ khóa class, tiếp
theo đó là tên của lớp và phần thân lớp được bao bởi cặp dấu {}. Kết thúc
lớp bằng dấu ;
 

0
1 class sinhvien
2{
3     private:
4         string masinhvien, ten, quequan;
5         int tuoi;
6         float diemtoan, diemly, diemhoa;
7     public:
8         void di();
9         void dung();
1         void ngoi();
0         void hoctap();
1 };
1
1
2
1
3
Từ khóa private và public quyết định các thuộc tính truy cập của các
thành viên lớp mà theo sau nó. Các thuộc tính này sẽ được nói trong phần
sau.

Định nghĩa đối tượng


Trong lập trình hướng đối tượng, các đối tượng (Object) là một thực thể
trừu tượng của một sự vật trong thế giới thực, được con người mô hình
hóa, ghi lại những tính chất và hành vi, để tạo nên thuộc tính (Attribute)
và phương thức (Method) của đối tượng (Object).

Khi một lớp (Class) được định nghĩa, chỉ có đặc tả cho đối tượng được xác
định. Do đó các đối tượng sẽ không được khởi tạo, nghĩa là không có bộ
nhớ hoặc lưu trữ được phân bổ cho các đối tượng thuộc lớp đó. Để sử
dụng dữ liệu và các hàm truy cập được xác định trong lớp, bạn cần khai
báo các đối tượng.

Cú pháp:

0
1sinhvien obj_1;
2sinhvien obj_2;
3
Cả hai đối tượng obj_1 và obj_2 sẽ có bản sao của các thành viên dữ liệu
(Data Member) riêng.
Như trong ví dụ trên:
Đối tượng obj_1 sẽ có các phương thức mã sinh viên, tên, tuổi, quê quán,
điểm toán, điểm lý, điểm hoá, … và các hành vi đi, đứng, ngồi, học tập, …
riêng so với đối tượng obj_2.

Nghĩa là các dữ liệu thành viên của obj_1 sẽ không bị thay đối khi dữ liệu
thành viên của obj_2 thay đổi và các dữ liệu thành viên của obj_1 cũng sẽ
không thể truy cập, tác động đến dữ liệu thành viên của obj_2.

Truy cập các dữ liệu thành viên


Để truy cập vào thành viên dữ liệu của đối tượng ta sử dụng toán tử truy
cập thành viên trực tiếp là dấu chấm .

Như ví dụ trên nếu muốn truy cập vào phương thức di() của đối
tượng obj_1 thì cú pháp sẽ là:

0
1obj_1.di();
2
Ta cùng xem ví dụ khác:

0
1 #include <bits/stdc++.h>
2 using namespace std;
3
4 class connguoi
5{
6 public:
7     string hoten;
8     int tuoi;
9
1 public:
0     void set()
1     {
1         cout << "Nhap Ho Ten: ";
1         fflush(stdin); // Xóa bộ đệm
2         getline(cin, this->hoten);
1
3         cout << "Nhap Tuoi: ";
1         cin >> this->tuoi;
4     }
1 };
5
1 int main()
6{
1     connguoi obj; // Khai báo obj là 1 đối tượng trong lớp connguoi
7
1     obj.set();
8
1     cout << "Ho Ten: " << obj.hoten << endl;
9     cout << "Tuoi: " << obj.tuoi << endl;
2
0     return 0;
2}
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
3
0
3
1
3
2
3
3
Ta nhập Input

0
1Nguyen Van A
218
3
Biên dịch và chạy chương trình ta sẽ có kết quả

0
1Ho Ten: Nguyen Van A
2Tuoi: 18
3
 

Điều quan trọng cần nhớ là:

1. Các thành viên public cũng được truy cập bằng toán tử .


2. Nhưng các thành viên private và protected không thể được truy
cập một cách trực tiếp bởi sử dụng toán tử truy cập thành viên
trực tiếp này.

Các loại phạm vi truy cập


Phạm vi truy cập là cách mà người lập trình quy định về quyền được
truy xuất đến các thành phần của lớp.

Trong C++ có 3 loại phạm vi chính là: private, protected, public

Phạm Vi Truy Cập Ý Nghĩa


Không hạn chế. Thành phần có thuộc tính
public
này có thể được truy cập ở bất kì vị trí nào.
Thành phần có thuộc tính này sẽ chỉ được
truy cập từ bên trong lớp. Bên ngoài lớp ha
private
trong lớp dẫn xuất sẽ không thể truy cập
được.
protected Mở rộng hơn private một chút. Thành phần
có thuộc tính này sẽ có thể truy cập ở trong
nội bộ lớp và trong lớp dẫn xuất
( lớp dẫn xuất sẽ được trình bày trong bài
Tính Kế Thừa )
 

Hàm thành viên trong lớp


Trong C++ chúng ta có 2 cách để xác định hàm thành viên:

 Xác định bên trong lớp


 Xác định bên ngoài lớp
Với ví dụ về lớp connguoi bên trên, hàm set() là một hàm được xác định
bên trong lớp.

Còn để xác định một hàm thành viên bên ngoài lớp ta phải sử dụng toán
tử scope ::kèm theo đó là tên lớp và tên phương thức.

0
1 #include <bits/stdc++.h>
2 using namespace std;
3
4 class connguoi
5{
6 public:
7     string hoten;
8     int tuoi;
9
1 public:
0     void set();
1 };
1
1 void connguoi :: set()
2{
1     cout << "Nhap Ho Ten: ";
3     fflush(stdin); // Xóa bộ đệm
1     getline(cin, this->hoten);
4
1     cout << "Nhap Tuoi: ";
5     cin >> this->tuoi;
1}
6
1 int main()
7{
1     connguoi obj; // Khai báo obj là 1 đối tượng trong lớp connguoi
8
1     obj.set();
9
2     cout << "Ho Ten: " << obj.hoten << endl;
0     cout << "Tuoi: " << obj.tuoi << endl;
2
1     return 0;
2}
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
3
0
3
1
3
2
3
3
3
4
3
5
Trong phần code bên trên, mình chỉ khai báo void set(); bên trong lớp.
Sau đó dùng toán tử :: để gọi lại tên hàm đó và viết các câu lệnh thực
hiện.

You might also like