Lớp Và Đối Tượng Trong C++

This entry is part 2 of 10 in the series This entry is part 2 of 10 in the series Hướng đối tượng người dùng C + +

Xin chào cả nhà.
Trong bài viết tiếp theo thì chùng ta sẽ cùng đi tìm hiểu các định nghĩa về lớp và đối tượng trong C++. Hiểu rõ cách truy cập và các phạm vi truy cập dữ liệu thành viên.

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

Ngôn ngữ C + + được tăng trưởng từ C lên, nó được bổ trợ thêm tính hướng đối tượng người tiêu dùng. Các lớp ( class ) là tính năng TT của C + + mà tương hỗ lập trình hướng đối tượng người dùng và thường được gọi là những 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 ) hoàn toàn có thể coi là bản thiết kế của những đối tượng người dùng ( Object ). Nó là một kiểu tài liệu do người dùng định nghĩa, chứa những thành viên tài liệu và những hàm thành viên của riêng nó .
Ta cùng lấy một ví dụ thực tiễn 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 ;

Lớp và Đối Tượng

012345678910111213

classsinhvien

{

private:

stringmasinhvien,ten,quequan;

inttuoi;

floatdiemtoan,diemly,diemhoa;

public:

voiddi();

voiddung();

voidngoi();

voidhoctap();

};

Từ khóa privatepublic 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 người dùng, những đối tượng người dùng ( Object ) là một thực thể trừu tượng của một sự vật trong quốc tế thực, được con người quy mô hóa, ghi lại những đặc thù và hành vi, để tạo nên thuộc tính ( Attribute ) và phương pháp ( Method ) của đối tượng người tiêu dùng ( Object ) .
Khi một lớp ( Class ) được định nghĩa, chỉ có đặc tả cho đối tượng người tiêu dùng được xác lập. Do đó những đối tượng người dùng sẽ không được khởi tạo, nghĩa là không có bộ nhớ hoặc tàng trữ được phân chia cho những đối tượng người tiêu dùng thuộc lớp đó. Để sử dụng tài liệu và những hàm truy vấn được xác lập trong lớp, bạn cần khai báo những đối tượng người tiêu dùng .
Cú pháp :

0123

sinhvienobj_1;

sinhvienobj_2;

Cả hai đối tượng obj_1obj_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à:

012

obj_1.di();

Ta cùng xem ví dụ khác :

0123456789101112131415161718192021222324252627282930313233

#include

usingnamespacestd;

classconnguoi

{

public:

stringhoten;

inttuoi;

public:

voidset()

{

cout<<" Nhap Ho Ten : ";

fflush(stdin);/ / Xóa bộ đệm

getline(cin,this->hoten);

cout<<" Nhap Tuoi : ";

cin>>this->tuoi;

}

};

intmain()

{

connguoiobj;/ / Khai báo obj là 1 đối tượng người tiêu dùng trong lớp connguoi

obj.set();

cout<<" Ho Ten : "<

<

obj.hoten<

cout<<" Tuoi : "<

return0;

}

Ta nhập Input

0123

NguyenVanA

18

Biên dịch và chạy chương trình ta sẽ có tác dụng

0123

HoTen:NguyenVanA

Tuoi:18

Đ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 privateprotected 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
public Không hạn chế. Thành phần có thuộc tính này có thể được truy cập ở bất kì vị trí nào.
private 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 hay 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 + + tất cả chúng ta có 2 cách để xác lập 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.

01234567891011121314151617181920212223242526272829303132333435

#include

usingnamespacestd;

classconnguoi

{

public:

stringhoten;

inttuoi;

public:

voidset();

};

voidconnguoi::set()

{

cout<<" Nhap Ho Ten : ";

fflush(stdin);/ / Xóa bộ đệm

getline(cin,this->hoten);

cout<<" Nhap Tuoi : ";

cin>>this->tuoi;

}

intmain()

{

connguoiobj;/ / Khai báo obj là 1 đối tượng người tiêu dùng trong lớp connguoi

obj.set();

cout<<" Ho Ten : "<

cout<<" Tuoi : "<

return0;

}

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.

Một vài quan tâm :

  1. Tất cả các hàm thành viên được định nghĩa bên trong lớp bởi các Inline mặc định, nhưng bạn cũng có thể thực hiện bất kỳ hàm không thuộc lớp nào bằng cách sử dụng từ khóa Inline.
    Inline là cách gọi tắt của Inline Function. Nó là các hàm nội tuyến.
    Hàm nội tuyến là các hàm thực tế, được sao chép ở mọi nơi trong quá trình biên dịch, như macro tiền xử lý, do đó sẽ tiết kiệm được thời gian gọi hàm.
    Hiểu rõ về Inline Function: Xem tại đây
  2. Khai báo hàm bạn friend là một cách để cấp quyền truy cập riêng và nó không phải là một hàm thành viên.
    Xem thêm về hàm bạn: Tại Đây

Bài viết của mình xin được kết thúc tại đây. Mình rất mong sẽ nhận được những quan điểm góp phần của những bạn bằng cách comment phía dưới, để bài viết của mình ngày càng triển khai xong hơn. Chào mọi người và hẹn gặp lại mọi người trong bài viết tiếp theo .
Một số tài liệu tìm hiểu thêm :