Thành viên tĩnh – Từ khóa static

Một phần của tài liệu Giáo trình lập trình hướng đối tượng c trường cao đẳng công nghiệp huế (Trang 122 - 123)

Một lớp có thể chứa các thành viên tĩnh hoặc không tĩnh. Nếu không chỉ định từ khóa là static cho các thành viên, thì theo mặc định, nó sẽ là non-static. Nếu muốn quy định cho một thành viên nào là tĩnh, thì ta bổ sung từ khóa static vào trước nó. Nếu là thành viên không tĩnh, ta không cần khai báo bất kì từ khóa nào.

Một dữ liệu thành viên tĩnh của lớp như là một biến toàn cục của lớp đó. Bởi mọi sự thay đổi dữ liệu thành viên tĩnh của đối tượng này đều có tác dụng lên toàn bộ các dữ liệu thành viên tĩnh của các đối tượng khác.

Một phương thức không tĩnh có quyền truy cập đến các dữ liệu thành viên không tĩnh. Một phương thức tĩnh có thế truy cập đến dữ liệu thành viên không tĩnh. Trong trường hợp này, ta cần tạo ra một sự thể hiện của đối tượng và truy cập đến các thuộc tính không tĩnh từ đối tượng này.Để truy cập đến thành viên không tĩnh, ta sử dụng một sự thể hiện của đối tượng, sau đó là dấu chấm (hoặc - >), tiếp đến là thành viên không tĩnh.Để truy cập đến đối tượng tĩnh, ta sử dụng toán tử phạm vi ngay sau tên lớp, tiếp đến là thành viên tĩnh. Các phương thức tĩnh và không tĩnh có thể truy cập lẫn nhau.

Ví dụ Kết quả #include <iostream> using namespace std; class Car { public: string name; int serial; public:

static int count; static void Show() {

Car vehicle;

vehicle.name = "Ford"; vehicle.serial = 123;

cout << "\nName: " << vehicle.name; cout << "\nSerial: " << vehicle.serial; }

static void CallShowStatic(){ Show(); } void CallShowNonStatic(){ Show(); } };

---Call by NonStatic method--- Name: Ford

Serial: 123

---Call by Static method--- Name: Ford

Serial: 123 Count: 2

C + + int Car::count = 2; int main() { Car a;

cout<<"---Call by NonStatic method---"; a.CallShowNonStatic();

cout<<"\n---Call by Static method---"; Car::CallShowStatic();

cout << "\n\nCount: " <<Car::count; return 0;

}

Giải thích: Hàm thành viên Show là static, nên muốn truy cập đến các dữ liệu

thành viên không tĩnh thì nó cần tạo một sự thể hiện của lớp đó là đối tượng vehicle. Hàm CallShowStatic là static, hàm CallShowNonStatic là non-static đều có thể truy cập đến hàm Show là static một cách trực tiếp. Trong hàm main, các hàm non-static được gọi thông qua một sự thể hiện lớp, còn hàm static được gọi thông qua toán tử phạm vi. Dữ liệu static là count cũng được truy cập thông qua toán tử phạm vi.

Mặc dù thành viên static có thể được truy cập trực tiếp thông qua toán tử phạm vi, nhưng nó cũng chịu sự chi phối của các mức truy cập (private, protected, public).

Chỉ có các thành viên không tĩnh mới có thể sử dụng con trỏ this.

Một phần của tài liệu Giáo trình lập trình hướng đối tượng c trường cao đẳng công nghiệp huế (Trang 122 - 123)