Tìm hiểu cơ bản về Class và Object trong C++ (có ví dụ)

Tìm hiểu cơ bản về Class và Object trong C++ (có ví dụ)

Cơ bản về Class và Object trong C++

Tìm hiểu cơ bản về Class và Object trong C++ (có ví dụ)

Định nghĩa Lớp (Class)

Lớp là khái niệm trung tâm của lập trình hướng đối tượng, nó là sự mở rộng của các khái niệm cấu trúc (struct) của C. Ngoài các thành phần dữ liệu, lớp còn chứa các thành phần hàm, còn gọi là phương thức (method) hoặc hàm thành viên (member function). Lớp có thể xem như một kiểu dữ liệu các biến, mảng đối tượng. Từ một lớp đã định nghĩa, có thể tạo ra nhiều đối tượng khác nhau, mỗi đối tượng có vùng nhớ riêng.

Chương này sẽ trình bày cách định nghĩa lớp, cách xây dựng phương thức, giải thích về phạm vi truy nhập, sử dụng các thành phần của lớp, cách khai báo biến, mảng cấu trúc, lời gọi tới các phương thức

Thuộc tính của lớp được gọi là dữ liệu thành phần và hàm được gọi là phương thức hoặc hàm thành viên. Thuộc tính và hàm được gọi chung là các thành phần của lớp. Các thành phần của lớp được tổ chức thành hai vùng: vùng sở hữu riêng (private) và vùng dùng chung (public) để quy định phạm vi sử dụng của các thành phần. Nếu không quy định cụ thể (không dùng các từ khóa private và public) thì C++ hiểu đó là private.

Các thành phần private chỉ được sử dụng bên trong lớp (trong thân của các hàm thành phần). Các thành phần public được phép sử dụng ở cả bên trong và bên ngoài lớp. Các hàm không phải là hàm thành phần của lớp thì không được phép sử dụng các thành phần này.

Khai báo các thuộc tính của lớp: được thực hiện y như việc khai báo biến. Thuộc tính của lớp không thể có kiểu chính của lớp đó, nhưng có thể là kiểu con trỏ của lớp này

Ví dụ:

Định nghĩa các hàm thành phần: Các hàm thành phần có thể được xâydựng bên ngoài hoặc bên trong định nghĩa lớp. Thông thường, các hàm thành phần đơn giản, có ít dòng lệnh sẽ được viết bên trong định nghĩa lớp, còn các hàm thành phần dài thì viết bên ngoài định nghĩa lớp. Các hàm thành phần viết bên trong định nghĩa lớp được viết như hàm thông thường. Khi định nghĩa hàm thành phần ở bên ngoài lớp, ta dùng cú pháp sau đây:

Toán tử :: được gọi là toán tử phân giải miền xác định, được dùng để chỉ ra lớp mà hàm đó thuộc vào. Trong thân hàm thành phần, có thể sử dụng các thuộc tính của lớp, các hàm thành phần khác và các hàm tự do trong chương trình

Chú ý:

  • Các thành phần dữ liệu khai báo là private nhằm bảo đảm nguyên lý che dấu thông tin, bảo vệ an toàn dữ liệu của lớp, không cho phép các hàm bên ngoài xâm nhập vào dữ liệu của lớp .
  • Các hàm thành phần khai báo là public có thể được gọi tới từ các hàm thành phần public khác trong chương trình .

Tạo lập đối tượng

Sau khi định nghĩa lớp, ta có thể khai báo các biến thuộc kiểu lớp. Các biến này được gọi là các đối tượng. Cú pháp khai báo biến đối tượng như sau:

Tên_lớp  Danh_sách_biến ;

Đối tượng cũng có thể khai báo khi định nghĩa lớp theo cú pháp sau:

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. Không có vùng nhớ riêng để chứa các hàm thành phần cho mỗi đối tượng. Các hàm thành phần sẽ được sử dụng chung cho tất cả các đối tượng cùng lớp.

Truy nhập tới các thành phần của lớp

Để truy nhập đến dữ liệu thành phần của lớp, ta dùng cú pháp:

Tên_đối_tượng. Tên_thuộc_tính

Cần chú ý rằng dữ liệu thành phần riêng chỉ có thể được truy nhập bởi những hàm thành phần của cùng một lớp, đối tượng của lớp cũng không thể truy nhập.Để sử dụng các hàm thành phần của lớp, ta dùng cú pháp:

Tên_đối_tượng. Tên_hàm (Các_khai_báo_tham_số_thực_sự)

Ví dụ:

Con trỏ đối tượng

Con trỏ đối tượng dùng để chứa địa chỉ của biến đối tượng, được khai báo như sau :

Tên_lớp * Tên_con_ trỏ ;

Ví dụ : Dùng lớp DIEM, ta có thể khai báo:

DIEM	*p1, *p2,	*p3 ; // Khai báo 3 con trỏ p1, p2, p3
DIEM	d1, d2 ;	//Khai báo hai đối tượng d1, d2
DIEM	d [20] ;	// Khai báo mảng đối tượng

Có thể thực hiện bằng

p1	= &d2 ;   //p1 chứa địa chỉ của d2, p1 trỏ tới d2
p2	=d ;	// p2 trỏ tới đầu mảng d
p3	=new DIEM //tạo một đối tượng và chứa địa chỉ của nó vào p3

Để truy xuất các thành phần của lớp từ con trỏ đối tượng, ta viết như sau :

Tên_con_trỏ -> Tên_thuộc_tính
Tên_con_trỏ -> Tên_hàm(các tham số thực sự)

Nếu con trỏ chứa đầu địa chỉ của mảng, có thể dùng con trỏ như tên mảng.

Ví dụ

Tìm hiểu thêm C++ Tutorial (w3schools.com)