[原创] C++(2)class 类

xutong   2022-12-14 16:45 楼主

学C++就是为了写arduino的库,其中比较主要用到的是类的编写。

先找到arduino编写库的参考,在arudino 官网给出了morse电码的一个例子,咱们没有io直接用cout代替。

Morse电码例子程序的地址如下:

https://docs.arduino.cc/learn/contributions/arduino-creating-library-guide

在Clion中可以直接新建class如图1所示

图1:clion新建c++类

图2:新建C++类添加到first_demo

//
// Created by xutong on 2022/12/13.
//

#ifndef FIRST_DEMO_MORSE_H
#define FIRST_DEMO_MORSE_H
#include "iostream"

class morse {
//public 代表公共可见
public:
static void dot();
static void dash();
//private 私有变量不可见
private:
static void initMorse();

};


#endif //FIRST_DEMO_MORSE_H

 

Morse.h 文件

//
// Created by 许同 on 2022/12/13.
//

#include "morse.h"
#include "iostream"
void morse::dot()
{
std::cout<<"high \r\n";
std::cout<<"delay 250ms \r\n";
std::cout<<"low \r\n";
std::cout<<"delay 250ms \r\n";
}
void morse::dash()
{
std::cout<<"high \r\n";
std::cout<<"delay 1000ms \r\n";
std::cout<<"low \r\n";
std::cout<<"delay 250ms \r\n";
}
// private 私有变量
void morse::initMorse()
{
std::cout<<"Init \r\n";
}

 

Morse.c文件

图3:运行结果

在主程序中,调用私有变量会报错,如下所示

图4:建议将Morse变量改为public变量

#include <iostream>
#include "morse.h"
int main() {
//创建一个名为mos的morse对象
morse mos;
//调用对象
mos.dash();
mos.dot();
return 0;
}

 

或者创建对象,直接调用对象函数就行。但仅仅是这个看不出来类的便利性,咱们继续给他传入参数。这样不同对象打印值细微差别。

//
// Created by 许同 on 2022/12/13.
//

#ifndef FIRST_DEMO_MORSE_H
#define FIRST_DEMO_MORSE_H
#include "iostream"

class morse {
//public 代表公共可见
public:
void dot();
void dash();
void initMorse(char name);
//private 私有变量不可见
private:
char Names;


};


#endif //FIRST_DEMO_MORSE_H

 

 

新建私有变量Names,Names是对其它东西不可见的,相当于Class的全局变量,在dot()和Dash中可以直接调用。

//
// Created by 许同 on 2022/12/13.
//

#include "morse.h"
#include "iostream"
void morse::dot()
{
std::cout<<"high ";
printf("%c\r\n",Names);
std::cout<<"delay 250ms \r\n";
std::cout<<"low \r\n";
std::cout<<"delay 250ms \r\n";
}
void morse::dash()
{
std::cout<<"high ";
printf("%c\r\n",Names);
std::cout<<"delay 1000ms \r\n";
std::cout<<"low \r\n";
std::cout<<"delay 250ms \r\n";
}
void morse::initMorse(char name)
{
printf("%c\r\n",name);
Names=name;
std::cout<<"Init OK \r\n";
}

 

以上代码在Dash和Dot中调用Names,就可以直接使用了。

图5:传入不同变量的运行结果

#include <iostream>
#include "morse.h"
int main() {
//创建一个名为mos的morse对象
morse mos;
//给mos传入字符A
mos.initMorse('a');
//调用对象
mos.dash();
mos.dot();
//创建一个名为mosb的morse对象
morse mosb;
//给mosb传入字符B
mosb.initMorse('b');
//调用对象
mosb.dash();
mosb.dot();
return 0;
}

 

主程序

 

参考文档

C++prime plus 第6版

 

Arduino :Writing a Library for Arduino

 

 

希望做一些大家觉得好用的东西!

回复评论 (9)

多谢分享呀,希望一直写下去,学好C++,我也好跟着学习。谢谢!
点赞  2022-12-15 07:15
引用: lugl4313820 发表于 2022-12-15 07:15 多谢分享呀,希望一直写下去,学好C++,我也好跟着学习。谢谢!

感谢鼓励!


点赞  2022-12-15 10:01

arduino 如何写库参考

我不懂的单词在旁边添加了注释,这个方法学英语很好

Writing a Library for Arduino Arduino Documentation Arduino Documentation.pdf (1.6 MB)
(下载次数: 1, 2022-12-15 11:09 上传)
希望做一些大家觉得好用的东西!
点赞  2022-12-15 11:10
引用: xutong 发表于 2022-12-15 11:10 arduino 如何写库参考 我不懂的单词在旁边添加了注释,这个方法学英语很好

我给你点赞,加油,希望每天看到你更新一帖。一年后,就有不一样的您!

点赞  2022-12-15 12:42
引用: lugl4313820 发表于 2022-12-15 12:42 我给你点赞,加油,希望每天看到你更新一帖。一年后,就有不一样的您!

我方向还是挺杂的,不过基本每周都有些东西

希望做一些大家觉得好用的东西!
点赞  2022-12-15 12:44

clion可以,好东西!

默认摸鱼,再摸鱼。2022、9、28
点赞  2022-12-15 19:02
引用: freebsder 发表于 2022-12-15 19:02 clion可以,好东西!

跨平台


点赞  2022-12-16 07:38

补全、提示、重构这些很好用,现在已经离不开了。

默认摸鱼,再摸鱼。2022、9、28
点赞  2022-12-16 16:52
引用: freebsder 发表于 2022-12-16 16:52 补全、提示、重构这些很好用,现在已经离不开了。

嘿嘿,随时离开

希望做一些大家觉得好用的东西!
点赞  2022-12-17 09:32
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复