C++ OOP từ cơ bản đến nâng cao (Phần 2)

Tuan Binh
blog.tuanbinh
Published in
4 min readSep 13, 2017

Xin chào các bạn, bài hôm nay chúng ta sẽ tiếp tục tìm hiểu về Constructor trong lập trình hướng đối tượng với C++. Ở bài trước như đã giới thiệu có 3 loại Constructor:

  • Constructor mặc định
  • Constructor có tham số
  • Constructor sao chép

Constructor mặc định:

  • Không có kiểu trả về
  • Cùng tên với class
  • Phải trong tầm vực public

Constructor có tham số:

  • Có 3 tính chất như trên
  • Có tham số truyền vào

Ta khai báo như sau:

9

Cách gọi (2 cách) như sau:

Constructor sao chép (copy constructor)

Nhưng trước khi đi vào tìm hiểu, chúng ta hãy lướt qua khái niệm “Tham chiếu" là gì trươc nhé, tại sao mình lại nói như vậy vì khi sử dụng copy constructor có sử dụng đến khái niệm “Tham chiếu” vì vậy chúng ta sẽ đi tìm hiểu lần lượt nhé.

Cách khai báo tham chiếu:

int b = 6; //lúc này b được cấp phát bộ nhớ và có giá trị là 6
int& c = b; // ta nói c là tham chiếu của b hoặc c là nickname của b, sử dụng c,b là như nhau

Ví dụ sau sử dụng các tham chiếu trong C++:

Chạy chương trình C++ trên sẽ cho kết quả như hình sau:

Vậy các bạn đã hiểu được khái niệm Tham chiếu trong C++ rồi, chúng ta quay lại chủ để Hàm khởi tạo sao chép nhé.

Ta cùng xem ví dụ sau:

Ở ví dụ trên ta gán clA2 cho clA1, có nghĩa là nó sẽ tuần tự gán từng giá trị của clA1 qua cho clA2, khi chạy chương trình ta debug sẽ thấy kết quả như hình

Đây gọi là phép gán bình thường(mặc định)

Chúng ta có thể tạo ra đối tượng mới giống đối tượng cũ một số đặc điểm, không phải hoàn toàn như phép gán bình thường, hình thức “giống nhau” được định nghĩa theo quan niêm của người lập trình đó là phương thức thiết lập sao chép.

Cú pháp

Chúng ta tiếp tục đến với phần tiếp theo của series này nhé.
Hàm phá huỷ (Destructor)

  • Destructor được gọi ngay trước khi một đối tượng bị thu hồi.
  • Destructor thường được dùng để thực hiện việc dọn dẹp cần thiết trước khi một đối tượng bị huỷ.
  • Một lớp chỉ có duy nhất một Destructor.
  • Phương thức Destrucotr trùng tên với tên lớp nhưng có dấu “~” đằng trước
  • Được tự động gọi thực hiện khi đối tượng hết phạm vi sử dụng.
  • Destructor phải có thuộc tính public.

Cú pháp:

Ví dụ bài toán sử dụng con trỏ, ta dùng hàm phá huỷ để giải phóng.

Thành viên (thuộc tính) tĩnh — static data member

Các đặc tính chính:

  • Một bản duy nhất tồn tại trong suốt quá trình chạy của chương trình.
  • Dùng chung cho tất cả các đối tượng của lớp. Bất kể có bao nhiêu đối tượng tạo ra từ class đó.
  • Phải được định nghĩa bên ngoài class vì thành viên tĩnh được lưu trữ riêng biệt, không giống như các thành phần khác của đối tượng.
  • Giá trị khởi tạo = 0 và có thể gián giá trị khởi tạo.

Ví dụ mình hoạ cho các bạn dễ hình dung

Khi gọi hàm Countvalue() giá trị của biến count sẽ = 2;

Thành viên (thuộc tính) tĩnh — static member functions

Các đặc tính chính:

  • Phương thức tĩnh chỉ có thể truy cập đến thành viên tĩnh (thuộc tính hoặc phương thức tĩnh khác)
  • 1 phương thức tĩnh có thể được gọi qua tên class ngay khi không có đối tượng nào của lớp đó tồn tại

Ví dụ minh hoạ cho các bạn dễ hình dung:

Bài này tạm thời chúng ta sẽ dừng tại đây, hẹn gặp các bạn trong bài viết tiếp theo của mình nhé:)

--

--