02/10/2018, 14:26

[Học OOP] Bài 5: Static trong hướng đối tượng c++

Bài viết này là phần 5 trong 9 bài của Series Học lập trình hướng đối tượng OOP Học lập trình hướng đối tượng OOP [Học OOP] Bài 1: Các đặc điểm mới trong c++ [Học OOP] Bài 2: Tổng quan về lập trình hướng đối tượng [Học OOP] Bài 3: Lớp trong lập trình hướng đối tượng [Học OOP] ...

Bài viết này là phần 5 trong 9 bài của Series Học lập trình hướng đối tượng OOP

Học lập trình hướng đối tượng OOP
  • [Học OOP] Bài 1: Các đặc điểm mới trong c++
  • [Học OOP] Bài 2: Tổng quan về lập trình hướng đối tượng
  • [Học OOP] Bài 3: Lớp trong lập trình hướng đối tượng
  • [Học OOP] Bài 4: Constructor, destructor và Copy constructor trong hướng đối tượng c++
  • [Học OOP] Bài 5: Static trong hướng đối tượng c++
  • [Học OOP] Bài 6: Hàm bạn, lớp bạn trong hướng đối tượng c++
  • [Học OOP] Bài 7: Overload toán tử trong Lập trình hướng đối tượng c++
  • [Học OOP] Bài 8: Kế thừa trong lập trình hướng đối tượng c++ (Phần 1)
  • [Học OOP] Bài 9: Hiểu kế thừa như thế nào cho đúng trong hướng đối tượng (Phần 2)

1. Định nghĩa Static c++

Static trong c++ là dữ liệu của lớp không phải là dữ liệu của đối tượng. Static trong c++ tồn tại như một biến toàn cục. Hay nói cách khác dữ liệu static xuất hiện trước khi bạn khởi tạo đối tượng của lớp, và nó chỉ tồn tại duy nhất.

Các thành viên static có thể là public, private hoặc protected.

Static ngoài khai báo biến còn có thể khai báo hàm.

Đối với class, static dùng để khai báo thành viên dữ liệu dùng chung cho mọi thể hiện của lớp:

  • 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 thể hiện của lớp.
  • Bất kể lớp đó có bao nhiêu thể hiện.

2. Biến static trong hướng đối tượng c++

Ví dụ mình sẽ khai báo một biến static, int count, biến này dùng để đếm số lượng các hình chữ nhật đã được tạo ra.

Như vậy khi một đối tượng được tạo chúng ta sẽ tăng count lên để thực hiện đúng ý đồ đếm hình chữ nhật.

Tuy nhiên chúng ta không thể gán trước giá trị ban đầu của static trong class mà chúng ta phải gán giá trị cho nó ở ngoài class.

ví dụ

Ví dụ về static trong c++

Ví dụ về static trong c++

Ví dụ bên trên chỉ rõ biến static count không phải là dữ liệu của đối tượng như awidth và length mà nó là dữ liệu của class và chỉ tồn tại duy nhất.

Để sử dụng, gán hoặc lấy giá trị của static bạn sử dụng phạm vi truy xuất để gọi nó

Lưu ý thêm ở phần khai báo mình để static count ở private, nên bên ngoài class không thể dùng phạm vi truy xuất đến truy cập (Như cách gọi Rectangle::count ) Nhưng việc khai báo và gán giá trị ban đầu như  int Rectangle::count = 0;  là được phép.

Để dùng Rectangle::count bạn có thể khai báo biến static này ở public hoặc viết thêm hàm static get giá trị count này.

3. Hàm static trong hướng đối tượng c++

Hàm static có vai trò cũng như biến static. Nghĩa là khi bạn đã khai báo class nhưng chưa tạo ra đối tượng như  Rectangle r1(2,4)  thì chúng ta vẫn truy cập được biến count như ví dụ trên. Vậy ở phần hàm static cũng có vai trò như vậy, hàm này sẽ là tồn tại duy nhất của class.

Mình sẽ khai báo thêm  static int getCount()  ở thuộc tính public

a. Code cụ thể về static

b. Gọi hàm static

Bạn có thể gọi hàm static bằng cách sau:

  • Gọi  Rectangle::getCount() ở ngoài class hoặc bên trong class
  • Gọi getCount() Bên trong class.

Chủ đề này không thật sự quan trọng lắm, tuy nhiên bạn cũng nên hiểu vì nó rất dễ

0