1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
| #include <Arduino.h>
class Led{
// 对象是对类的具象化(实例化)
public: // 公共的, 可以通过类的外部调用
Led();// 构造函数,不需要返回值标识符;// 建立LED对象的时候, LED构造函数就会执行
~Led(); // 析构函数,在删除对象前,马上执行析构函数
// 构造函数和析构函数是不能有任何返回值的, 所以建立函数时, 也不需要返回值标识符;
// 一个类,不一定需要构造函数和析构函数
// 构造函数和析构函数虽然在Public关键字的下方,但是这两个函数都是不能在外部调用的,只能是实例化对象和销毁对象时调用;
Led(int userLedPin); // 这个也是构造函数, 实例化时传参会执行此构造函数
// 多个重名函数, 叫做函数重载,需要传参的数量不一样;
// 以下两个函数是类的成员函数, 可以通过类的外部调用
void on();
void off();
int pinNumber = 2; // 可以给一个初始值, 实例化时传参可以更改此变量,不传参程序也不会出错,pinNuber初始值就等于2
int getPrivatePinNumber(); // 给类的实例提供一个公共方法,让其可以访问到类的私有成员 privatePinNumber;
void setPrivatePinNumber(int userLedPin); // 给类的实例提供一个公共方法,让其可以修改类的私有成员 privatePinNumber;
private: //在private下边的成员函数或者变量,只能在类的内部调用
int privatePinNumber = 1; // 此处的成员属于类的私有成员,在类的外部无法访问,如果需要在外部访问,则可以建立一个公共方法来返回私有成员;
};
Led::Led(){
Serial.println("Led Object Created .");
pinMode(pinNumber, OUTPUT);
}
Led::Led( int userLedPin ) : pinNumber(userLedPin){
Serial.println("Led Object Created . 传参");
// pinNumber = userLedPin; // 此句赋值操作,和上边第二行的操作一样,
pinMode( pinNumber, OUTPUT);
};
Led::~Led(){
Serial.println("Led Object Deleted .");
}
void Led::on(){
digitalWrite(pinNumber, HIGH);
};
void Led::off(){
digitalWrite(pinNumber, LOW);
};
int Led::getPrivatePinNumber(){
return privatePinNumber;
}
void Led::setPrivatePinNumber(int userLedPin){
privatePinNumber = userLedPin;
}
void setup(){
Serial.begin(9600);
Led myLed; // 这一句代表,通过LED类来实例化一个myLed 对象,建立LED对象的时候, LED构造函数就会执行;
Led myLed2(7);
for(int i=0; i<3; i++){
myLed2.on();
delay(1000);
myLed2.off();
delay(1000);
}
int myLed2Pin = myLed2.pinNumber; // 在类的外部访问类的公共变量
Serial.println(myLed2Pin);
// myLed.on();
// delay(1000);
// myLed.off();
// delay(1000);
Serial.println("HELLO, This is from Setup() .");
Serial.print("通过一个公共方法在类的外部获取类的私有成员");
Serial.println(myLed2.getPrivatePinNumber()); //通过一个公共方法在类的外部获取类的私有成员
};
void loop(){
};
|