c++基础

1.c语言与c++的区别

C语言:面向过程的结构化程序设计语言, 中级语言

例如:我想吃西红柿炒鸡蛋

面向过程的西红柿炒蛋:按步骤一步一步的去做(买番茄,鸡蛋,炒),才有可能得到最终的结果,注重的是过程,只有过程对了,才有好的结果!

C++语言:面向对象的编程语言

面向对象的西红柿炒蛋:点外卖, 坐着等,不需要关注你怎么做出来! 注重的是结果

1)编程思想的不同:C++的面向对象的编程思想更接近于我们自然界的发展规律的!

      C语言中的也有面向对象编程的影子:结构体—》只是简单的描述属性,并不能被一个学生描述的活灵活现的;缺少动态的内容;

       C++: 属性+行为整合。

2)C++是完全兼容C, 只要是合法的C语言程序在C++中也是合法的;

3)C++多了2个+,因为C++比C扩充了非常多的内容;不管是关键字、数据类型等都有扩充!

应用领域:

QT—》嵌入式产品的UI设计

人工智能领域: 图像处理—opencv—C++/C

游戏开发

2.命名空间---3W1H

1)解决问题:命名冲突(变量名、函数名、自定数据类型)

 在C语言中,同一个作用域中是不允许出现同名的变量、同名的函数的,同名的数据类型。

实际生活中:一定会有这样子的情况发生,例子:有个班级中可以有相同名字的学生呀!

如何区分呢:就是在变量或者是函数名的前面加上作用域或者 归属。

命名空间:

 格式: namespace 命名空间的名字{变量, 函数、自定义的数据类型};

访问:

 分类:有自定义命名空间 ,也有标准的命名空间(std)

例如:using namespace std;

3.标准的输入输出流

C语言中标准的输入输出函数: printf、scanf、getchar、putchar、gets、puts

什么流:以字节为单位,连续的方向统一的就是流!

输入流: cin >> a;     就是从标准输入流中输入数据到 a

输出流: cout << a;    就是把a输出到标准的输出流中

 好处:不需要什么格式命名,输入也不需要关注要不要加&符号!使用方便简单!

 4.引用类型-----指针对比

目的:弱化指针;因为这个引用可以实现和指针一样的效果;C++

      减少临时空间的开辟; 指针定义变量的时候,会给分配4字节或者是8字节的内存空间存地址;但是我们的引用是不需要的,因为已经存在了,引用是用来起别名的!

引用是什么: 就是给变量起别名   int a=10; int &b =a;

格式:    数据类型 &引用名字 = 变量名;

指针与引用有什么区别? 是什么? 特点? 应用场景?

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

2)定义不同: 指针变量是需要分配内存空间的;引用不需要额外的分配内存空间,他和变量指向同一块内存空间;

3)初始化不同: 指针变量可以不给初始化,建议给初始化为null;引用是必须给初始化的;

4)使用上: 指针变量指向的地址是可以变化的;引用一旦初始化了就不可以改变

使用引用比使用指针安全

5)应用:函数的参数设计上;在C++中尽量少使用指针传参,因为引用可以实现和指针一样的效果!

5.函数重载

函数: 函数类型  函数名(参数列表){执行语句;}

作用·:减少代码冗余、可维护可扩充的、功能单一、高内聚低耦合。

 同样的一个.c文件,使用gcc编译和g++编译后发现,得到的可执行文件中调用的函数的名字是不同的!

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

使用g++编译,函数名发生了变化,根据函数名+形参的个数以及类型进行的重命名!一旦函数名不同,那么函数对应的地址就不一样的!

函数重载的原理:

就是因为使用g++编译后,函数名会根据函数参数以及参数个数进行重命名,名字不同对应的函数地址也就不一样,从而就可以很好的区分执行哪一个函数!

6.参数默认值

就是在函数定义的时候给函数的参数初始值!

调用的时候 可以给值也可以不给值;如果调用的时候有给值,就按给的值参与运算,如果没有给值,就按默认值参与运算!

注意:

1)当函数的参数有默认值的时候,进行函数重载时要注意调用冲突二义性。

2)函数参数默认值给的顺序是 从右向左的顺序依次去给;调用的时候实参与形参的匹配顺序是从左向右的。

3)当函数的声明和定义同时存在的时候,参数的默认值只能出现一次,并且我们建议在声明的地方写函数参数的默认值,定义中就不要写了!

7.c++中如何引入c的库

C++中可以直接使用C中提供的标准的库函数头文件

在C++中引入 我们自定义的C 的库:

制作静态库

 如何解决:

 目标是:C的库仍然是可以在gcc使用同时也可以g++使用!

唯一不一样的是:             Gcc编译函数名不变

                                          G++编译的时候函数名变化

解决的问题: 如何判断什么时候函数名需要变化,什么时候不需要变化

换句话说只要判断编译器就可以了!判断此时的编译器是gcc呢还是g++?    那如何判断呢?

 

 8.动态分配内存

Malloc                         Free  是C中标准的库函数!!!

如果分配的不是连续的空间:new和delete是运算符!!!!

New 数据类型;

Delete 变量名即可!!!!

 s = new int[3]();          进行初始化(为0)

new和malloc的区别

1)malloc和free是c中标准的库函数;new和delete是运算符。

2)它们都可以用来动态分配内存空间

3)使用上malloc要指定开辟空间的大小,需要进行强制类型转换,申请到的空间没有初始化,需要memset进行初始化,必须要用free进行释放。

4)使用new开辟空间,书写简单直接跟数据类型,不需要指定开辟多大的空间,不需要强制类型转换,new开辟的空间可以进行初始化在后面加()即可初始化,必须要用delete进行释放。

9.面向对象编程中的类和对象

面向对象编程:关注的是结果,其实内部也有过程的!

面向对象编程:对象(数据+算法)+对象+对象组成。

C语言中面向对象编程:结构体

什么是结构体:为了描述一类事物的属性而自定义的数据类型

例如:

学生:属性:学号、姓名、出生日期、性别、成绩

           行为:能上课、能做作业、能吃饭、能睡觉。

C++的面向对象: 希望能够把属性和行为给整合起来,来描述一类事物!

C++中的结构体与C中的结构体有什么区别?

1)C中的结构体里面不可以有函数;C++中的结构体中是可以有函数!

2)空的结构体,在C语言中占0字节;在C++中占1个字节;

C++中为了更好的表达面向对象的,引入了!自定义的数据类型!

什么是类: 为了描述一类事物的属性和行为而自定义的一种数据类型,就是类!

关键字class

格式:   class 类名{属性和行为};

什么是对象:类这个数据类型定义的变量,我们称为对象

C++中的类与C++中结构体的区别?

1)结构体的关键字:struct,类的关键字是 class;

2)结构体中的成员默认权限是 public;类中的成员默认权限是 private!

3)结构体的初始化方式和类的初始化方式不同

类中的访问权限有3种

Public:   公有的       类的内部和类的外部都可以访问

Private:  私有的       类的外部是不可以访问

Protected:受保护的     类的外部是不可以访问

什么是类的内部: {};里面

什么是类的外部: {};外面

C++面向对象编程特性:4大特性

抽象、封装、继承、多态!

抽象:提取共性:共同的属性和行为

什么是封装:就是把共同的行为和属性组成在一起,这个概念就是封装!在对只需提供对应的接口—函数即可!

例如:空调上的按钮

总结封装: 把一类事物的属性和行为用外壳(自定义的数据类型)类包起来,该隐藏的隐藏,该暴露的暴露的。

什么是需要隐藏的?属性,放在private私有区域

什么是需要暴露的?行为,放在public 公有区域

类定义的格式:

Class 类名

{

  Public:

成员函数;

 Private:

      数据成员;

 Protected:

};

以手机为例子:

属性:品牌、型号、运行内存、内存、颜色、价格、像素等

行为:开机、关机、打电话、拍照、上网等

类和对象的关系:类是对象的抽象;对象是类的具体实例!

在内存中的关系中:类的成员函数是这个类所有对象共用一份;这个类的每一个对象都拥有一份属于自己的数据成员

10.this指针

类的所有的成员函数都有一个隐藏的参数,是当前这个类类型的指针变量,当调用这个成员函数的时候,这个指针变量保存的是当前对象的地址!

通过this指针来区分访问的是谁的数据成员!谁调用成员函数,this指的就是谁的地址!

建议大家:类的成员函数中要访问数据成员,记得加this指针;因为当类的成员函数的参数的名字和数据成员的名字一样的时候,不加this的话,是没法区分谁是谁!

不管是类的内部还是类的外部,要访问类的成员,必须通过对象的方式去访问:

如果是普通的类对象,访问成员用.+成员

如果是指针类型的对象,访问成员用->成员

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值