day01

  1. C++与C的区别

各自是什么?特点?不同地方?

<1>字面上: 第一个词是一样,C++是完全兼容C,只要是合法的C的程序在C++中都是合法的!C++是C的增强版本

<2>. C++比C多了两个+,C++中扩展了很多内容,数据类型:引用、类类型、布尔类型等!关键字:friend、class、bool、public等!

<3>.编程思想是不一样的,C语言是面向过程的结构化的程序设计语言,中级语言。

C++是面向对象的编程语言,更接近自然界的发展规律!

什么是面向过程

注重的是过程,只有过程对了,才有可能得到正确的结果;

C语言中其实也有面向对象,只不过不够彻底;

什么是面向对象:

注重的是结果

学生{静态的属性和行为整合在一起;

例子:红烧鱼: 自己做—按步骤一步一步的去实现

点外卖:不关注店家是怎么做的,我只要结果

C++应用场景:

  1. QT:嵌入式产品的图形界面UI设计- C++实现的

  1. 人工智能:图像处理—opencv框架 C++去实现

  1. 游戏方向

C++中的不同于C的特性

  1. 命名空间

在C语言中,同一个作用域中能不能出现同名的变量?出现同名的函数?自定义同名的数据类型?

答案是不可以的!

在实际生活中,一定会出现同名的!

例如:一个班级中有同名的学生!一个校区的不同班级中也可以有同名的学生!

是什么? 作用范围

解决问题:解决命名冲突的问题!变量、函数、自定义的数据类型

什么时候用?

一个老师带A班,B班;A班有张三,B班也有张三;

老师叫张三的时候,有可能来的是A班的,也有可能来的是B班,如何区分?

叫人的时候加上归属(作用域):A的张三

怎么用:

命名空间格式

namespace 命名空间的名字{可以有变量,也可以有函数,还可以有自定义的数据类型};

使用:

命名空间名字::变量等!

使用using namespace命名空间名字; 切换到对应的范围中,直接使用即可!

  1. 标准输入输出流

C语言中标准的输入输出头文件 stdio.h

库函数 Scanf、 printf在C++中是可以直接使用的!

除此之外,C++中也有提供专门用来做输入输出流!

什么是流: 以字节为单位,连续不断,方向一致的称为流!

输入流对象: cin

使用: cin>> 变量;

输出流对象: cout

使用:<< 变量;

好处: 输入输出不需要做格式的限制,使用简单

代码实现:

  1. 引用类型-----引用与指针的区别(面试常问的题目)

什么是指针: 保存地址,得到地址,可以对地址中的内容做修改、访问!

应用在: 函数参数设计

引用: 可以实现和指针一样的效果。

目的:

  1. 弱化指针,能用指针实现的可以替换成引用!

  1. 减少临时空间的分配: int *p;就需要给p分配内存空间;引用是不需要分配内存空间。

什么是引用: 就是给变量起别名,变量是已经存在的,别名和变量指的是同一块内存空间!

定义的格式: 数据类型 &引用名 = 变量名;

Int p = 10;

Int &pt = p; // 这里的pt就是给p起的别名

应用:在函数参数设计上

案例: 两数交换

整理一下:引用与指针的区别:

  1. 引用是给变量起别名;指针是用来保存地址;

  1. 定义指针变量系统会给分配内存空间,定义引用不会额外的分配内存空间;

  1. 指针变量定义完之后可以不进行初始化,但是一般为了避免野指针,会初始化为NULL;

引用定义完必须进行初始化

  1. 指针变量是可以改变指向,但是引用一旦初始化之后不可以改变指向。使用引用比使用指针安全!

  1. 应用:都可以设计成函数的参数类型。

说明一个常量的方法:

使用宏定义

使用const修改引用---通常应用在函数参数设计上!

  1. 函数重载

函数名的设计比较困难

两数求和或者交换封装函数:

Int sum(int a,int b); //只能实现两个int类型数的求和

Double sum_double(doublea, double b);

char sum_char(chara, char b);

解决问题:函数功能相似,参数不同(参数类型不同)的一组函数,解决函数名命名困难的问题!(在C语言中不能出现同名函数)

函数重载定义: 函数名相同,函数功能要相似,参数不同(参数类型不同、参数个数不同、参数类型的顺序不同),与返回值类型无关的一组函数!

函数调用的原理:

函数定义完之后在内存中是有一块空间,编译成2进制文件,调用函数的地方存的就是函数在内存中的地址;根据地址找到对应的代码块去执行(函数名指的就是函数的地址),执行完之后再反回到调用的地方继续往下执行!

验证为什么在C中不可以有同名函数,而C++中允许有

使用gcc和g++分别去编译了同一个.c源文件,观察了可执行二进制文件,发现:

使用gcc编译完之后,函数名没有发生变化

使用g++去编译的时候,函数名发生变化了,函数名字根据函数参数类型以及个数进行重命名!

函数名不同,函数在内存中的地址就不同!

总结

函数重载的原理:使用g++进行编译的时候,函数名会根据参数类型以及参数个数进行重命名,函数名字不一样,函数在内存中的地址就不同,调用的时候执行的就是不同的函数体!

  1. 参数默认值

什么是参数默认值:就是在函数定义的时候给了形参一个初始值。

当我们在调用函数的时候,可以选择性的给这个参数值,可以给它值也可以不给它值!如果不给它值,按默认值参与函数体中的运算;如果给了它值,就按给的值参与函数体中的运算!

当函数参数有默认值,可以解决函数重载中 只有参数个数不同的而造成的代码冗余!

在设计函数参数默认值的时候要注意:

1.参数默认值给的顺序是从右向左的;调用函数的时候参数匹配的顺序是从左向右的

2.在函数重载中,当函数参数有默认值的时候要注意二义性,不然就会出错!

解决方案:

3.当函数声明和函数定义同时存在的时候,参数的默认值只能出现一次,建议放在函数声明的地方!

  1. 如何在C++中引入C的库

C中的标准库在C++中使用:直接 #include<>即可!

C中自定义的库如何在C++中使用呢?

gcc : 编译完之后函数名不变

g++: 编译完之后函数名变化

验证:

制作C的自定义的库 .h .c 生成静态库

如何解决:

目标:C的库既能在C中使用,也能在C++中使用!

先要明确当下使用的编译器是g++还是gcc?

如何判读编译器是g++还是gcc?

方法1:

方法2:计算一个字符占的内存大小,也可以来区分!!!

最终的解决方案:

Extern“C”{} 告诉C++编译器按照C的规则去处理即可

验证ok!

8、动态内存分配

C中的动态内存分配:

malloc库函数

free库函数

C++中有提供另外的动态内存分配的方法:

New运算符 –开空间

Delete运算符—释放空间

书写格式:

数据类型 *指针变量 = new 数据类型;==》 delete 指针变量;

数据类型 *指针变量 = new 数据类型[个数]; ==》 delete [] 指针变量;

整理面试题目: new和malloc的区别?

  1. New是C++中的运算符,malloc是C中标准的库函数;

  1. 书写: new后面只要跟数据类型即可,并且开空间后不需要进行强制类型转换;

Malloc开空间:要给开空间的大小,并且开空间后要进行强制类型转换;

  1. New开的空间用delete去释放; malloc开的空间free去做释放;

  1. New开的空间可以让做初始化,malloc开的空间初始化要自己用memset去做;

  1. 对于类类型来说,new的方式去创建对象,会自动的调用构造函数;delete释放对象的时候会自动调用析构函数;

Malloc是不会执行构造函数的,free是不会执行析构函数的!!!

面试题目:

为什么有了malloc和free还需要new和delete?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值