引用调用方式

类型名 &引用名 (变量名) 或 类型名 &引用名 = 变量名

  • 引用是别名,建立引用时必须初始化
  • 形参是引用,实参是变量

内联函数

inline 类型说明符 被调用函数名(形参表)

  1. 必须提前声明和定义
  2. 内联函数不交换控制权
  3. 不支持递归、循环、switch选择等复杂语句

面向对象三大特性

  • 继承性
  • 封装性
  • 多态性

类特性

抽象性 隐藏性 封装性 多态性

类是对象的抽象, 对象是类的实例

  • public 权限开放
  • private 仅成员和友元
  • protected 成员、友元、派生
继承方式 public protected private
public public protected private
protected protected protected private
private private private private

复制构造函数

类名 (const 类名 &对象名);

const 为保护实参对象可读,可省略 对象名是本类对象的引用,根据需求确定

1
2
3
4
5
6
7
8
9
class A
{
public:
A(int a);
A(const A &a);
};
A a(1);
A b(a); // 方式1
A c = b; // 方式2

静态成员(static)

静态数据成员

  • 静态数据成员必须初始化,且必须单独初始化
  • 定义时候不加 private/public/protected
  • 静态数据成员也可以定义为私有的静态数据成员

数据类型 类名:: 静态数据成员 = 值;

静态成员函数

  • 静态成员函数可以引用静态成员,不能直接引用非静态

类名::静态成员函数(参数表)

友元

友元函数 可放在类中任意位置,效果相同

friend 返回类型 函数名(参数表)

友元类

派生类构造函数

1
2
3
4
派生类名(派生类构造函数总参数表):<基类构造函数>(<参数表1>),<子对象名>(<参表2>)  
{
<派生类中数据成员初始化>
}

派生类的析构函数

  • 先执行派生类的析构函数,再执行基类的析构函数
  • 各个基类构造函数的执行顺序取决于定义派生类时所指定的各个基类的顺序,而与派生类构造函数的成员初始化列表中给定的基类顺序无关。

动态联编

三条件

  1. 虚函数
  2. 满足复制兼容规则
  3. 成员函数/指针/引用调用虚函数

抽象类

  • 至少含一个纯虚函数

virtual <返回值类型> <函数名> (<参数表>)=0;

  • 不能建立对象

运算符重载

1
2
3
4
5
6
7
8
9
10
//成员函数
<返回值类型> operator<运算符>(<参数表>)
{
……
}
//友元函数
friend <返回值类型> operator<运算符>(<参数表>)
{
……
}

C

= [ ] () -> 这四个运算符只能被重载为类的非静态成员函数

赋值兼容规则

  • 派生类对象可以赋值给基类对象
  • 派生类对象可以初始化基类引用
  • 基类对象可以指向派生类对象

其他

  • 代码复用的三种方式:继承、模板、组合
  • 提取运算符>> ,插入运算符<<
  • 运算符重载要求保持其原来的操作数个数、优先级、结合性和语法结构

一级标题

二级标题

三级标题

四级标题

五级标题
六级标题

无序列表

  • 项目一
  • 项目二
  • 项目三
    • 子项目
    • 子项目

有序列表

  1. 项目一
  2. 项目二
  3. 项目三
    1. 二级项目
    2. 二级项目
      1. 三级项目
      2. 三级项目
  4. 项目四

一级引用

二级引用

三级引用


粗体:Markdown
斜体:Markdown
粗体+斜体:Markdown
删除线:MarkDown
网址:liuchang.men
使用脚注1


TODOLIST


关于 latex 公式

行内公式:\(E=mc^2\)

单行公式:

\(x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}\)


来张图片吧


这是表格

Tables(左对齐) Are(居中对齐) Cool(右对齐)
1 right-aligned $1600
2 centered $12
3 are neat $1

代码测试

行内代码 nano

代码块

1
2
import math
print("hello world!")
1
2
3
4
5
6
#include <stdio.h>

int main() {
printf("hello world!\n");
return 0;
}
1
2
3
4
5
6
7
#include <iostream>
using namespace std;

int main() {
cout << "hello world!" << endl;
return 0;
}

  1. Hi 这是一个注脚,会自动拉到最后排版↩︎

App Inventor开发

App Inventor 2

Android应用开发者(英语:App Inventor)是一款卡通图形界面的Android智能手机应用程序开发软件。它起先由Google提供的应用软件,现在由麻省理工学院维护及营运。

借助IA2 建立一个简易的游戏手柄。因为AI2 的蓝牙串口通讯协议是基于SPP(Serial Port Profile)串行端口配置。我们目的是并设定相对应代码,在手机发送,在树莓派解析,并对小车进行运动控制。

对应代码如下:

  • u –> 前进 gofront()

  • d –> 后退 goback()

  • l –> 左转 turnleft()

  • r –> 右转 turnright()

  • s –> 停止 istop()

每次代码运行周期为20ms

ai2截面图

树莓派蓝牙SPP设置

树莓派蓝牙配置

  1. 安装支持包

    1
    2
    sudo apt-get install pi-bluetooth
    sudo apt-get install bluetooth bluez blueman
  2. 添加pi用户到蓝牙组

    1
    2
    sudo usermod -G bluetooth -a pi
    service bluetooth status
  3. 启动/增加SPP

    1
    sudo nano /etc/systemd/system/dbus-org.bluez.service

    修改内容如下:

    1
    2
    ExecStart=/usr/lib/bluetooth/bluetoothd -C
    ExecStartPost=/usr/bin/sdptool add SP
  4. 重启,启动蓝牙串口

    1
    sudo rfcomm watch hci0

串口调试软件xgcom

1
2
3
4
5
6
7
sudo git clone https://github.com/helight/xgcom.git
sudo apt-get install make automake libglib2.0-dev libvte-dev libgtk2.0-dev
cd xgcom
sudo ./autogen.sh
sudo make
sudo make install
xgcom

展示与控制代码

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
import serial
import time
from btbu_robot.motor import motor
bluetooth = serial.Serial("/dev/rfcomm0",9600,timeout=0.5)

#bluetooth.open()
left = motor(22, 27, 17)
right = motor(24, 23, 18)
def gofront():
left.run(70)
right.run(70)
# print("前进")

def goback():
left.run(-70)
right.run(-70)
#print("后退")

def turnleft():
left.run(-70)
right.run(70)
#print("左转")

def turnright():
#print("右转")
left.run(70)
right.run(-70)

def istop():
left.run(0)
right.run(0)
#print("停止")

status = '' # 记录当前状态
if __name__ == '__main__':
while True:
data = bluetooth.readline().decode('utf-8')
if status == 'u': # 前进
gofront()

elif status == 'd': # 后退
goback()

elif status == 'l': # 左转
turnleft()

elif status == 'r': # 右转
turnright()

elif status == 's': # 停止
istop()
while data != '':
status = data[0]
if status == 'u': # 前进
gofront()

elif status == 'd': # 后退
goback()

elif status == 'l': # 左转
turnleft()

elif status == 'r': # 右转
turnright()

elif status == 's': # 停止
istop()
data = data[1:]
time.sleep(0.02)
time.sleep(0.02)

一个多月前和小伙伴熬了3天完成了2017数学建模,最后结果暂时还没出,估计也不理想。

但是好不容易写完论文,感觉排版不好,于是借助国赛\(\LaTeX\)模板,对论文进行重新排版,并且进一步完善。

经过前前后后一个月的时间,倒是做完了。现在看来,结果怎样倒是没什么了,有了这一次\(\LaTeX​\)排版的经验,反而收获不少。

顺便附上排版环境与最终论文:

  • 系统:Ubuntu 17.10 amd64
  • tex发行版本:texlive-2017
  • LaTex编译器:xelatex
  • bibTex编译器:xelatex
  • 编辑器:atom(插件:atom-latex language-latex pdf-view simplified-chinese-menu)

latex模板地址

拍照赚钱”的任务定价与任务分配的分析与探讨.pdf

0%