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.Bạn đang xem: Từ khóa static trong lập trình hướng đối tượng

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

Bạn đang xem: Từ khóa static trong lập trình hướng đối tượng

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.

class Rectangle{ private: int width; int length; static int count; public: void set(int w, int l); int area(); Rectangle() { count++; } Rectangle(int x, int y) { count++; set(x,y); }}12345678910111213141516171819class Rectangle{private:int width;int length;static int count;public:void set(int w, int l);int area();Rectangle(){count++;}Rectangle(int x, int y) { count++; set(x,y);}}

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ụ

int main(){ int Rectangle::count = 0; // Sau khi khởi tạo giá trị đầu mình tạo minh họa 3 hình chữ nhật Rectangle r1(2,4); Rectangle r2(1,2); Rectangle r3;}123456789int main(){int Rectangle::count = 0;// Sau khi khởi tạo giá trị đầu mình tạo minh họa 3 hình chữ nhậtRectangle r1(2,4);Rectangle r2(1,2);Rectangle r3;}
*

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ư width 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ó

//Ví dụ khởi tạo ban đầuint Rectangle::count = 0;//Gọi biến static:Rectangle::count12345//Ví dụ khởi tạo ban đầuint Rectangle::count = 0;//Gọi biến static:Rectangle::count

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.

Xem thêm: Bài Tập Giải Bài Toán Bằng Cách Lập Hệ Phương Trình Dạng Chuyển Động

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

a. Code cụ thể về static

class Rectangle{ private: int width; int length; static int count; public: void set(int w, int l); static int getCount() { return count; } int area(); Rectangle() { count++; } Rectangle(int x, int y) { count++; set(x,y); }}12345678910111213141516171819202122232425class Rectangle{private:int width;int length;static int count;public:void set(int w, int l);static int getCount(){return count;}int area();Rectangle(){count++;}Rectangle(int x, int y) { count++; set(x,y);}}

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 classGọ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ễ