Lập trình C++ - static trong C++

Từ khóa static trong C++

Static member là những thành phần được khởi tạo và cấp phát vào 1 vùng nhớ cố định. Thông thường 1 thuộc tính chỉ có thể được sử dụng khi có 1 object đại diện được khởi tạo, tuy nhiên với static member, ta có thể sử dụng mà không cần phải khai báo 1 object nào cả.

Ví dụ:

#include<iostream> 
#include<string> 
using namespace std;
/* Định nghĩa lớp */
class Car {
private:
	int  speed;               // Tốc độ  
	string  mark;           // Nhãn hiệu
	float price;               // Giá xe 						
							   // Khởi tạo với các giá trị ngầm định cho các tham số 
public:
	Car(int speed, string mark, float price);
	void show(); // Giới thiệu xe 
	static int totalCar;
};

/* Khai báo phương thức bên ngoài lớp */
Car::Car(int speed, string mark, float price) {
	this->speed = speed;
	this->mark = mark;
	this->price = price;
	this->totalCar++;
}

void Car::show() { // Phương thức giới thiệu xe 
	cout << "This is a " << mark << " having a speed of "
		<< speed << "km / h and its price is $" << price << endl;
	return;
}
int Car::totalCar = 0;
// Hàm main, chương trình chính 
int  main() {

	Car myCar1(120, "Toyota", 3000); // Khởi tạo đối tượng 1
	Car myCar2(150, "Mercedes", 5000);// Khởi tạo đối tượng 2										
	cout << "Co tong cong " << myCar2.totalCar<<" Cars";	
	system("pause");
	return 0;
}

Kết quả:

Co tong cong 2 Cars

Phương thức tĩnh

Tất nhiên, trong đối tượng thì thành phần bao gồm cả thuộc tính và phương thức, vì vậy phương thức có cả kiểu static. Một điều lưu ý là phương thức này chỉ có thể truy cập thuộc tính static, các phương thức bên trong và ngoài hàm, cũng như hàm. Phương thức static không thể truy cập đến các thuộc tính, phương thức thông thường trong 1 object.

Ví dụ:
 

#include<iostream> 
#include<string> 
using namespace std;
/* Định nghĩa lớp */
class Car {
private:
	int  speed;               // Tốc độ  
	string  mark;           // Nhãn hiệu
	float price;               // Giá xe 						
							   // Khởi tạo với các giá trị ngầm định cho các tham số 
public:
	Car(int speed, string mark, float price);
	void show(); // Giới thiệu xe 
	static int totalCar;
	static int getTotal() {
		return totalCar;
	}
};

/* Khai báo phương thức bên ngoài lớp */
Car::Car(int speed, string mark, float price) {
	this->speed = speed;
	this->mark = mark;
	this->price = price;
	this->totalCar++;
}

void Car::show() { // Phương thức giới thiệu xe 
	cout << "This is a " << mark << " having a speed of "
		<< speed << "km / h and its price is $" << price << endl;
	return;
}
int Car::totalCar = 0;
// Hàm main, chương trình chính 
int  main() {

	Car myCar1(120, "Toyota", 3000); // Khởi tạo đối tượng 1
	Car myCar2(150, "Mercedes", 5000);// Khởi tạo đối tượng 2
	// Ta có thể sử dụng myCar1.getTotal() hoặc myCar2.getTotal() thay cho Car::getTotal()
	cout << "Co tong cong " << Car::getTotal()<<" Cars";	
	system("pause");
	return 0;
}

Kết quả:

Co tong cong 2 Cars