C++ 面向对象编程

"Hello World, Hello GitheBlog"

Posted by Githe on May 8, 2024

正文

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(){

};