/*
靜態類成員 和 靜態類方法 可以被所有該類的對象共同享用,
同時也不需要有對象,而可以直接通過類直接使用的
技術角度: static的對象或者方法, 這内存中有且僅有一份
靜態類方法:内只能使用static的成員變量
推薦:如果一個成員方法沒有使用對象的成員變量,可以定義爲static,這樣子就可以直接通過類來訪問
Pre-Increment Operator ++a
先加,然後再執行表達式
int a = 10;
b = ++a; 可以看成
1> a=a+1; //output: a = 11
2> b = a; //output: a = 11, b = 11
Post-Increment Operator a++
先執行表達式,再加
int a = 10;
b = a++; 可以看成
1> b=a; //output: a = 10, b = 10;
2> a=a+1; //output: a = 11, b = 10
int a = 10;
b = ++a;
*/
class Esp32 {
private:
public:
static int count; // class成員變量 , 千萬不用忘記初始化,不能直接在這裏初始化,也不能在構造函數裏初始化
static void total() { //class成員方法,只能使用static的成員變量
Serial.print("當前ESP32開發板數量為 : ");
Serial.println(count);
}
static void info() { //未使用對象的成員變量,這時候可以使用static,讓該方法可以直接通過class訪問
Serial.println("ESP32 開發板");
Serial.println("技術文檔請參考espressif網站");
}
String model;
Esp32(String model_p = "UNKOWN") {
model = model_p;
++count;
};
~Esp32() {
--count;
}
protected:
};
//想想爲什麽不能再構造函數里進行初始化
int Esp32::count = 0; //初始化static成員變量
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
int a, b;
a = 10;
b = ++a;
Serial.println("Pre-Increment b = ++a");
Serial.println(" a = " + String(a));
Serial.println(" b = " + String(b));
a = 10;
b = a++;
Serial.println("Post-Increment b = a++");
Serial.println(" a = " + String(a));
Serial.println(" b = " + String(b));
Esp32::total(); // 0
Esp32 e1("ESP32-WROOM");
Esp32 e2("ESP32-WROVER");
Esp32 e3("ESP32-C3");
Esp32::total(); // 3
Esp32 * e4 = new Esp32("ESP32-S2");
Esp32 * e5 = new Esp32("ESP32-S3");
Esp32::total(); // 5
}
void loop() {
Esp32::total(); // 2 想想看這裏爲什麽是2?
delay(100000L);
}