c++前期学习记录

c++前期学习记录,第1张

  C++上课记录

前言 什么是嵌入式设备

除了电脑以外的所有带cpu的电子产品都是嵌入式设备,软硬件定制(软硬件可裁剪)。

嵌入式设备有3个阶段
  1. 不带系统的嵌入式
  2. 带 *** 作系统的嵌入式设备
  3. 嵌入式人工智能:能跑系统,还能实现人工智能,如智能语音音箱
将来的发展

要什么都了解,但在某一个方向上很精通(要时刻学习)。在工作当中把工作的事情做好,但也要学习针对自己长远目标的打算所需要的东西。真正学透需要十年,踏踏实实是铭记。

学习的框架

嵌入式的图形界面的开发

用QT,它跨平台是它的重要的特点,使用的C++语言编程。

C++的应用

游戏一般都用c++,一些人工智能也用C++。在嵌入式学习C++主要是为了学习QT。

从现在就要开始做笔试题了

书名《程序员面试笔记》

正文day1 命名空间 格式:
    1. namespace 命名空间名

  {

         定义变量名

};

总结:
  1. 命名空间的作用:解决命名冲突
  2. 一般放在xxx.h文件中
  3. 就是全局变量
输入输出流
  1. c++已经定义好了两个标准输入流和标准输出流的对象,cin和cout,在iostream头文件中的std的命名空间中定义的。
引用 什么是引用

就是变量的别名,一块空间可以取很多别名,通过任何一个别名都可以访问到这块内存空间。

为什么用引用

两个需求:

  1. 不再需要开辟临时空间
  2. 弱化指针的使用
怎么用引用

定义 引用:数据类型 &引用名 = 变量名(或常量名)

int a;

int &b = a;

int &c = a;

const int &f = 100;

总结:
  1. 引用不会开辟新的内存空间
  2. 引用也可以起别名
  3. 引用必须初始化
函数的重载 什么是重载

函数功能类似,函数名相同,参数不同(个数、类型),与返回值无关,这些函数就互为重载。

为什么用重载

多个类似的函数用同一个名字,不用再像C语言每一个函数名必须不同,根据参数表自动调整应该对应的那个函数。

怎么用重载

像用C语言中的函数一样,直接用就好,参数不一样对应的函数就不一样,编译器会给函数起别名。(实际上,只要有函数名的地方,g++编译器都会进行重命名)

默认参数

这里的参数:指的是函数的形参

默认参数:在定义函数时函数的形参有默认值,定义赋值必须从右到左。

作业
  1. int a;

    int &b = a;

    int a;

    int *b = a;

    指针和引用在使用时的区别?
  1. 形式不一样,比如

  1. 指针可以有多级,引用只能是一级
  2. 指针可以在定义的时候不初始化,引用必须在定义的时候初始化
  3. 指针可以指向NULL,引用不可以为NULL
  4. 指针初始化之后可以再改变,引用不可以
  5. sizeof 的运算结果不同
  6. 自增运算意义不同
  7. 指针和引用作为函数参数时,指针需要检查是否为空,引用不需要
  8. 指针只能指向字符串常量,引用可以访问各种常量。

正文day2 类、对象和封装

1、C语言的结构体:一个自定义的数据类型,用来描述一类事物的属性。

2、类不占内存空间,对象占内存空间。类是抽象的,对象是具体的,类是对象之上的抽象,对象是类的具体化。

3、类默认是私有的,要用需要加public;结构体默认是public

访问限定符:

public  protected  private

封装:

用类这种数据类型将一类事物的属性和行为包起来,将需要隐藏的隐藏起来,将可以暴露的暴露出来。

如何实现隐藏和暴露?------访问限定符

public的成员:既可以在类的内部被访问,也可以在类外部被访问。

private和protected:只能在类的内部被访问,不能在类的外部访问。

this指针 什么是this

this是一个地址,存放的是某一个对象的地址。

为什么要用this 怎么用this

哪个对象调用成员函数,this就指向这个对象。

构造函数和析构函数 什么是构造函数

构造函数:给成员变量初始化的,系统在实例化对象时自动调用的。

构造函数的定义:

  1. 函数名和类名相同
  2. 参数可有可无,可以重载
  3. 无返回值

如果我们没有定义构造函数,系统会自动提供一个无参、无函数体的函数,

一旦我们自定义了构造函数,就会执行自定义构造函数。

为什么用构造函数

为了初始化成员变量,构造函数的核心作用就是,初始化对象的数据成员

怎么用构造函数

类名()

{

}

系统自动调用,像 “类名  对象名() ”写法不对,传参需要小括号,不传参不需要小括号。

总结:

  1. “类名 对象名 ”调用的是默认构造函数。
    1. 没用定义,系统提供
    2. 自定义的无参的构造函数
    3. 自定义有参构造函数
    4. 创建对象时只有一个构造函数会被调用。
  2. 一个类可以有多个构造函数,会重载。
  3. 构造函数必须是 public 属性的,否则创建对象时无法调用
  4. 不管是声明还是定义,函数名前面都不能出现返回值类型,即使是 viod不允许。
  5. 函数体中不能有 return 语句。
析构函数 什么是析构函数:

在一个对象的生命周期结束时,系统会自动调用构造函数,没有定义,系统自动提供,定义了系统不提供。

为什么用析构函数:

为了释放构造函数在堆区申请的空间。

怎么用析构函数:

用在构造函数的生命周期结束。

拷贝构造函数

当通过一个已有的对象给一个新实例化的对象初始化时,会调用拷贝构造函数。

定义:

  1. 函数名和类名相同
  2. 参数必须是类对象的引用

一般情况下,使用系统提供的。但当要拷贝在堆区的内容时,需要用深度拷贝构造函数(自定义)。

正文day3 new和delete运算符 什么是new和delete运算符:

new:在堆区申请内存空间

delete:四方在堆区申请的空间

new、delete和malloc、free的区别:

  1. new和delete是c++中的运算符,malloc和free是c标准库中的函数
  2. 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中的作用
  1. static修饰局部变量时,延长了局部变量的生命周期,存放在静态区,只会被初始化一次
  2. static修饰全局变量时,限制了全局变量的作用域,只能在本文件中使用
  3. static修饰函数时,限制了函数的作用域,只能在本文件中使用
思考:

static修饰的变量在什么时候被分配内存空间?

            答:在编译的时候              

总结:
  1. static修饰的成员变量不占对象的内存
  2. static修饰的成员变量一个类只有一份,这个类的所有对象共享
  3. static修饰的成员变量属于类
  4. static不能定义在类内,不然会报错,需要定义在类外。

未完待续。。。。。。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/914750.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-16
下一篇2022-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存