Vấn đề static trong class C++?

#include <iostream>

using namespace std;

class MyStaticClass{
public:
	static int value;
	MyStaticClass(){ 
		value++; 
	}
	~MyStaticClass(){}
};
int MyStaticClass::value;
void main(){
	MyStaticClass::value = 0;
	for (int i = 0; i<9; i++)
		MyStaticClass *c = new MyStaticClass();
	cout << MyStaticClass::value;
	system("pause");
}

Mọi người ơi giải thích giúp em tại sao kết quả lại cho ra 9 vậy ạ. Và khi thay MyStaticClass *c = new MyStaticClass(); thành MyStaticClass c(); thì kết quả lại bằng 0 ạ. Cho em hỏi thêm dòng code int MyStaticClass::value; có ý nghĩa gì vậy ạ, khi xóa nó thì chương trình báo lỗi. Cảm ơn mọi người.

2 Likes

Mỗi khi một instance của class được tạo ra thì constructor được chạy, và value sẽ được cộng thêm 1. Mình đã thử thay thành MyStaticClass c(); và nó vẫn ra là 9.

Khi khao báo một biến static trong class, ta phải gán cho nó một giá trị. Vd int MyStaticClass::value = 3. Trong trường hợp không ghi giá trị thì máy sẽ hiểu ngầm là 0.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?