c++基础知识

这一章节我们主要针对没有c++基础的同学开设的,主要讲解一下我们系统中常用c++语法及常用类;

提到c++就不得不先提一下 ,也不要想得太复杂,把它当C语言中的结构体来理解就可以了,举个例子:

// C
struct Position {
    int left;
    int top;
    int width;
    int height;
};

// c++
class Position {
public:
    int left;
    int top;
    int width;
    int height;
};

定义变量:

// C
struct Position pos;

// c++
Position pos;

操作变量:

// C和c++一样
pos.left = 0;

比C语言中的结构体多了继承、多态、重载还有访问权限的一些概念,对于只熟悉C语言的同学可以不用过多的关注这些细节,只要掌握如何使用即可;
另外,里可以直接定义函数,C语言中的结构体是定义函数指针,这一点有点不一样,定义完函数后,就可以跟操作变量一样使用了,这里举一个在我们框架中常用的例子:

// 设置文本内容,其中 mTextView1Ptr为ZKTextView类型的指针变量
mTextView1Ptr->setText("Hello");

常用类

string类

string类其实就是对字符串进行了一些封装,并提供了一大堆函数,只熟悉C语言的同学只需要知道一个函数就可以了:c_str(),该函数会返回string类中的字符串数据,这里也举一个在我们框架中常用的例子:

// 输入框回调接口
static void onEditTextChanged_Edittext1(const std::string &text) {
    // c_str()函数的返回值类型:const char *
    const char *pStr = text.c_str();

    // 之后就可以像普通的字符串操作了,如获取字符串长度strlen(pStr) 等等

}

再举一个获取文本控件内容的例子:

// std为命名空间,std::string表示使用std下的string类,不用过多的理会  
// 碰到string类,我们参考下面定义就可以了
std::string text = mTextView1Ptr->getText();

// 之后的操作就都一样啦
const char *pStr = text.c_str();

格式化输出函数snprintf

函数原型:

  int snprintf(char* dest_str,size_t size,const char* format,...);

功能:

将可变个参数(...)按照format格式化成字符串,然后将其复制到str中。
(1) 如果格式化后的字符串长度 < size,则将此字符串全部复制到str中,并给其后添加一个字符串结束符('\0');
(2) 如果格式化后的字符串长度 >= size,则只将其中的(size-1)个字符复制到str中,并给其后添加一个字符串结束符('\0'),返回值为欲写入的字符串长度。

所需头文件:

  #include <stdio.h>

格式化参数

  • 规定符
    %d 十进制有符号整数
    %u 十进制无符号整数
    %f 浮点数
    %s 字符串
    %c 单个字符
    %p 指针的值
    %e 指数形式的浮点数
    %x, %X 无符号以十六进制表示的整数
    %o 无符号以八进制表示的整数
    %g 把输出的值按照%e或者%f类型中输出长度较小的方式输出
    %p 输出地址符
    %lu 32位无符号整数
    %llu 64位无符号整数

  • 说明
    (1).可以在“%”和字母之间插进数字表示最大场宽。
    例如:%3d表示输出3位整型数,不够3位右对齐。
    %9.2f表示输出场宽为9的浮点数,其中小数位为2,整数位为6,
    小数点占一位,不够9位右对齐。
    %8s表示输出8个字符的字符串,不够8个字符右对齐。
    如果字符串的长度、或整型数位数超过说明的场宽,将按其实际长度输出。
    但对浮点数,若整数部分位数超过了说明的整数位宽度,将按实际整数位输出;
    若小数部分位数超过了说明的小数位宽度,则按说明的宽度以四舍五入输出。
    另外,若想在输出值前加一些0,就应在场宽项前加个0。
    例如:%04d表示在输出一个小于4位的数值时,将在前面补0使其总宽度为4位。
    如果用浮点数表示字符或整型量的输出格式,小数点后的数字代表最大宽度,小数点前的数字代表最小宽度。
    例如:%6.9s表示显示一个长度不小于6且不大于9的字符串。若大于9,则第9个字符以后的内容将被删除。
    (2).可以在“%”和字母之间加小写字母l,表示输出的是长型数。
    例如:%ld表示输出long整数
    %lf表示输出double浮点数
    (3).可以控制输出左对齐或右对齐,即在"%"和字母之间加入一个"-"号, 说明输出为左对齐, 否则为右对齐。
    例如:%-7d 表示输出7位整数左对齐
    %-10s 表示输出10个字符左对齐

  • 特殊规定符
    \n 换行
    \f 清屏并换页
    \r 回车
    \t Tab符

例子

  • 直接输出整型

    char buf[64] = {0};
    snprintf(buf, sizeof(buf), "%d", 314);
    LOGD("%s", buf);//日志输出buf
    

    日志输出为

    314
    
  • 控制整型的位数

    char buf[64] = {0};
    snprintf(buf, sizeof(buf), "%05d", 314); //格式化为5位数,不足5位数,前面补0
    LOGD("%s", buf);//日志输出buf字符串
    

    日志输出为

    00314
    
  • 直接输出浮点数

    char buf[64] = {0};
    snprintf(buf, sizeof(buf), "%f", 3.14); 
    LOGD("%s", buf);//日志输出buf字符串
    

    日志输出为

    3.140000
    
  • 控制输出浮点数格式

    char buf[64] = {0};
    //输出小数,共6个字符宽度(含小数点在内), 3个小数位,两个整数位,整数不足两位的则补0
    snprintf(buf, sizeof(buf), "%06.3f", 3.14);
    LOGD("%s", buf);//日志输出buf字符串
    

    日志输出为

    03.140
    
powered by Gitbooklast modified: 2021-05-28 12:00:31

results matching ""

    No results matching ""