
C++上课记录
前言 什么是嵌入式设备除了电脑以外的所有带cpu的电子产品都是嵌入式设备,软硬件定制(软硬件可裁剪)。
嵌入式设备有3个阶段- 不带系统的嵌入式
- 带 *** 作系统的嵌入式设备
- 嵌入式人工智能:能跑系统,还能实现人工智能,如智能语音音箱
要什么都了解,但在某一个方向上很精通(要时刻学习)。在工作当中把工作的事情做好,但也要学习针对自己长远目标的打算所需要的东西。真正学透需要十年,踏踏实实是铭记。
学习的框架 嵌入式的图形界面的开发用QT,它跨平台是它的重要的特点,使用的C++语言编程。
C++的应用游戏一般都用c++,一些人工智能也用C++。在嵌入式学习C++主要是为了学习QT。
从现在就要开始做笔试题了书名《程序员面试笔记》
正文day1 命名空间 格式:-
- namespace 命名空间名
{
定义变量名
};
总结:- 命名空间的作用:解决命名冲突
- 一般放在xxx.h文件中
- 就是全局变量
- c++已经定义好了两个标准输入流和标准输出流的对象,cin和cout,在iostream头文件中的std的命名空间中定义的。
就是变量的别名,一块空间可以取很多别名,通过任何一个别名都可以访问到这块内存空间。
为什么用引用两个需求:
- 不再需要开辟临时空间
- 弱化指针的使用
定义 引用:数据类型 &引用名 = 变量名(或常量名)
int a;
int &b = a;
int &c = a;
const int &f = 100;
总结:- 引用不会开辟新的内存空间
- 引用也可以起别名
- 引用必须初始化
函数功能类似,函数名相同,参数不同(个数、类型),与返回值无关,这些函数就互为重载。
为什么用重载多个类似的函数用同一个名字,不用再像C语言每一个函数名必须不同,根据参数表自动调整应该对应的那个函数。
怎么用重载像用C语言中的函数一样,直接用就好,参数不一样对应的函数就不一样,编译器会给函数起别名。(实际上,只要有函数名的地方,g++编译器都会进行重命名)
默认参数这里的参数:指的是函数的形参
默认参数:在定义函数时函数的形参有默认值,定义赋值必须从右到左。
作业-
int a;
int &b = a;
指针和引用在使用时的区别?int a;
int *b = a;
- 形式不一样,比如
- 指针可以有多级,引用只能是一级
- 指针可以在定义的时候不初始化,引用必须在定义的时候初始化
- 指针可以指向NULL,引用不可以为NULL
- 指针初始化之后可以再改变,引用不可以
- sizeof 的运算结果不同
- 自增运算意义不同
- 指针和引用作为函数参数时,指针需要检查是否为空,引用不需要
- 指针只能指向字符串常量,引用可以访问各种常量。
1、C语言的结构体:一个自定义的数据类型,用来描述一类事物的属性。
2、类不占内存空间,对象占内存空间。类是抽象的,对象是具体的,类是对象之上的抽象,对象是类的具体化。
3、类默认是私有的,要用需要加public;结构体默认是public
访问限定符:public protected private
封装:用类这种数据类型将一类事物的属性和行为包起来,将需要隐藏的隐藏起来,将可以暴露的暴露出来。
如何实现隐藏和暴露?------访问限定符
public的成员:既可以在类的内部被访问,也可以在类外部被访问。
private和protected:只能在类的内部被访问,不能在类的外部访问。
this指针 什么是thisthis是一个地址,存放的是某一个对象的地址。
为什么要用this 怎么用this哪个对象调用成员函数,this就指向这个对象。
构造函数和析构函数 什么是构造函数构造函数:给成员变量初始化的,系统在实例化对象时自动调用的。
构造函数的定义:
- 函数名和类名相同
- 参数可有可无,可以重载
- 无返回值
如果我们没有定义构造函数,系统会自动提供一个无参、无函数体的函数,
一旦我们自定义了构造函数,就会执行自定义构造函数。
为什么用构造函数为了初始化成员变量,构造函数的核心作用就是,初始化对象的数据成员
怎么用构造函数类名()
{
}
系统自动调用,像 “类名 对象名() ”写法不对,传参需要小括号,不传参不需要小括号。
总结:
- “类名 对象名 ”调用的是默认构造函数。
- 没用定义,系统提供
- 自定义的无参的构造函数
- 自定义有参构造函数
- 创建对象时只有一个构造函数会被调用。
- 一个类可以有多个构造函数,会重载。
- 构造函数必须是 public 属性的,否则创建对象时无法调用
- 不管是声明还是定义,函数名前面都不能出现返回值类型,即使是 viod不允许。
- 函数体中不能有 return 语句。
在一个对象的生命周期结束时,系统会自动调用构造函数,没有定义,系统自动提供,定义了系统不提供。
为什么用析构函数:为了释放构造函数在堆区申请的空间。
怎么用析构函数:用在构造函数的生命周期结束。
拷贝构造函数当通过一个已有的对象给一个新实例化的对象初始化时,会调用拷贝构造函数。
定义:
- 函数名和类名相同
- 参数必须是类对象的引用
一般情况下,使用系统提供的。但当要拷贝在堆区的内容时,需要用深度拷贝构造函数(自定义)。
正文day3 new和delete运算符 什么是new和delete运算符:new:在堆区申请内存空间
delete:四方在堆区申请的空间
new、delete和malloc、free的区别:
- new和delete是c++中的运算符,malloc和free是c标准库中的函数
- malloc在使用时需要进行强转,计算申请的空间大小,new不需要。
面试题:为什么有了malloc和free还要有new和delete呢?
答: 在实例化对象时,使用malloc不会调用构造函数,而使用new会自动调用构造函数,使用free不会调用析构函数,而使用delete会自动调用析构函数,因为malloc和free是标准c库的函数,不能被修改。
为什么用new和delete运算符使用特殊的运算符为给定类型的变量在运行时分配堆内的内存,这会返回所分配的空间地址。这种运算符即 new 运算符。
如果您不再需要动态分配的内存空间,可以使用 delete 运算符,删除之前由 new 运算符分配的内存。
怎么用new和delete运算符new:申请一块动态空间
delete:释放申请的动态空间
static 回忆:static在C中的作用- static修饰局部变量时,延长了局部变量的生命周期,存放在静态区,只会被初始化一次
- static修饰全局变量时,限制了全局变量的作用域,只能在本文件中使用
- static修饰函数时,限制了函数的作用域,只能在本文件中使用
static修饰的变量在什么时候被分配内存空间?
答:在编译的时候
总结:- static修饰的成员变量不占对象的内存
- static修饰的成员变量一个类只有一份,这个类的所有对象共享
- static修饰的成员变量属于类
- static不能定义在类内,不然会报错,需要定义在类外。
未完待续。。。。。。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)