C++学习的实用性网站:https://en.cppreference.com/
q1: 为什么嵌入式要使用c语言?
a1: c语言的可移植性较强,因为c语言中的智能指针可以直接访问其硬件的地址;
q2: 为什么嵌入式开发要学习c++?
a2: C++可以更好进行GUI界面图形化。嵌入式的组成部分包括软件,中间件,操作系统,硬件,其中软件和中间件大部分使用的是C++,主要利用的还有C++面向对象的思想。
q3: 系统调用和库函数的调用的区别?
a3: 系统调用的效率较低,因为当用户每次调用系统API访问系统内核的时候,都会保护中断的现场,多次调用会影响cpu的执行 效率。
库函数的调用存在一个缓冲区的机制,他可以将多次的系统调用转化成一次系统调用,从而提高了效率。
q4: 面向对象的思想实例
a4: 面向对象的思想https://www.cnblogs.com/BeiGuo-FengGuang/p/5935763.html
q5: C++的三大特点:
封装----------维护性:1、封装保证了代码的独立性,可以快速定位到出bug的代码段。
2、还有一个就是封装中对访问权限(private,protected,public)的控制。 eg:电视的封装。
继承----------复用性
多态----------扩展性
q6: static
1)修饰成员变量---------延长变量的生命周期
2)修饰全局变量或者函数----------限定其作用域,只能在当前的文件中被访问
q7: 命名空间的使用
注意事项:1)源文件中定义的命名空间只能在当前的源文件中被访问,不可以在其他的源文件中被访问。
2)命名空间名相同,成员变量名不同可以理解为追加一个成员变量。
3)命名空间名不同,成员变量名相同,编译的时候会报错,原因在于命名空间中的成员变量被多次定义。
所以,在定义一个命名空间的时候一般都将命名空间中的成员只做声明处理,避免被多次定义。
q8: cout cin 行缓冲
cerr(错误) clog(日志)
q9: 如何防止头文件重复包含(两种方法)
1)#ifndef
#define
#endif
2) #pragma once 表示当前系统下只被宏定义一次
q10: C++对C实用性的加强
1)for循环的加强:
a、所有的变量都可以在使用时被定义
b、foreach的使用
eg:for(int temp:array)
2)register的加强:
a、register只能修饰局部变量,不能修饰全局变量
b、C无法获得register变量的地址,而C++可以
c、修饰的变量一定是cpu可以接受的类型(例如cpu一般不能够接受浮点型的数据运算)
3)struct结构的加强:
结构体名可以作为一个新的类型
4)新增了bool类型
5)三目运算符的加强:
a、C中表达式的结构存放于寄存器中,返回的是变量的值
b、C++表达式返回的是变量的本身,如果是常量,不可以作为左值,如果是变量可以作为左值
6)const的加强
a、C中const修饰的是一个常变量,本质仍为变量,有自己的地址空间
b、C++const修饰的是一个常量,存储在符号表中,没有自己的地址空间
c、C++中const对const,必须用const指针来接收const常量的地址(对const常量取地址并不会改变原变量的值,只是当其取地址时,会为其分配一个地址空间,并把新的地址空间赋给const指针)
7)typedef如何函数指针重命名?
8)new vs malloc
a、malloc是以字节为单位的,new是按照变量的个数为单位
b、malloc是函数,new是操作符
c、malloc只分配不初始化,new既分配又初始化