一、指针
二、面向对象
arduino也有面向对象的编程,语法如下
2.1 类的声明与实现
class People{
private: //私有属性和方法
String _name;
public: //定义公有属性和方法
void setName(String); //方法
}; //记得加上分号
void People::setName(String na){ //方法的实现,函数类型、数据类型要与定义类里面一致
this->_name = na;
}
People xh; //实例化类对象
void setup() {
xh.setName("xiaohong");//对象方法的调用
}
void loop() {
}
方法定义在外面,类型函数等等要保持一致
写类的方法也可以这么写
私有属性在外部不能直接被访问,如:xh._name 是不允许的,但是能够被对象内部调用,间接访问私有属性
2.2 继承
继承的语法
class People {
private: //私有属性和方法
String _name;
public: //定义公有属性和方法
void setName(String); //方法
String getName(String);
}; //记得加上分号
class Man:public People{ //定义一个man类,继承People这个父类
private:
cahr _sex;
public:
String introSelf();
}
如果直接这样定义父类子类,子类是不能访问父类的私有属性、私有方法的,解决方法如下,将private改为protected,子类就能访问私有属性啦
class People {
protected: //私有属性和方法
String _name;
public: //定义公有属性和方法
void setName(String); //方法
String getName(String);
}; //记得加上分号
class Man:public People{ //定义一个man类,继承People这个父类
private:
cahr _sex;
public:
String introSelf();
}
2.3 面向对象的访问限制修饰符
- public //对象外部内部都能访问的属性和方法
- private // 外部不能直接访问的属性和方法
- protected //子类和父类能访问的私有属性和方法,外部不能直接访问
2.4 构造方法
在面向对象编程中,往往需要对象在实例化的时候能够初始化一些值,在声明类的时候直接赋值是可以的,但是会造成一些混乱,为属性进行赋值也是一种实现,我们尽量将声明和实现分开,
面向对象有一个方法适合初始化某些值,那就是构造方法
class Father {
char _sex = 'M';//如果属性或者方法前面没有限制修饰符,默认就是私有的属性或者方法
public:
char getName(){
return this->_sex;
}
Father(char sex){//构造方法,会在实例化时直接调用
this->_sex = sex;
}
}
- 构造方法可以有多个,而且可以同名,但是带的参数必须不一样
如,实例化时,不带参数则调用无参数的构造方法,带参数则调用带参数的构造方法
- 如果这样定义子类,实例化子类时,是不能直接调用父类的构造方法
可以有以下解决办法,可以通过传递参数间接调用父类的构造方法
2.5 重载
在一个类里面同名的方法是存在多个的。可以传递不同的参数调用对象里不同的方法,这种机制称为重载(overload),同名方法通过不同的的参数实现不同的函数调用
- 重载与运算符