c++笔记上

day1

C语言与C++区别

C语言与C++区别

编程思想不同C语言面向过程(按照步骤一步一步完成)的结构化程序设计语言(中级语言),注重过程,只有过程对了,才有好的结果;C++面向对象的编程语言不关注过程,只注重结果C++描述的是属性+行为整合

C++完全兼容C语言,只要是合法的C语言程序在C++中都可以使用。

C++比C语言多了++,C++在C语言的基础上扩充了很多内容,包括关键字、数据类型等等。

C++应用领域

C++应用领域

QT---嵌入式产品的UI设计。

人工智能领域,图像处理(人脸识别)。

游戏开发。

命名空间

命名空间的作用

用来处理变量名和函数名相同时的命名冲突

格式

namespace  命名空间的名字

{

变量

函数

自定义的数据类型

······

};

访问

方法一

using  namespace  命名空间的名字

int  main()

{

·····

}

方法二

int  main()

{

·····

命名空间的名字::成员;

}

分类

标准命名空间、自定义命名空间

标准输入输出流

位置

(处于标准命名空间中)

#include<iostream>

using  namespace  std

输入

给目标从键盘上输入值

cin>>目标;

直接给目标赋值

cin>>赋值>>目标;

输出

将目标中的值输出

cout<<目标;

直接输出

cout<<“”<<“”<<“”;

换行endl的作用是结束本行,同换行作用

cout<<目标<<endl;  

cin与cout的优点

不需要什么格式命名,输入也不需要关注要不要加&符号!

引用类型——指针对比

引用的作用

弱化指针;减少临时空间的开辟

格式

数据类型 &引用名字 = 变量名;  //变量名必不可少,一旦确定就不可改变

指针与引用有什么区别

1、作用不同:指针用来保存地址;引用是给变量起别名的

2、定义不同指针变量是需要分配内存空间在32位系统中占4个字节);引用不需要额外的分配内存空间,他和变量指向同一块内存空间

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

4、使用上不同:指针变量指向的地址是可以变化的;引用一旦初始化了就不可以改变因此使用引用比使用指针安全

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

函数重载

定义

函数名相同,函数功能相似,参数不同(类型不同,数量不同,类型顺序不同),与返回值类型无关的一组函数

特性

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

gcc编译与用g++编译的差异

gcc编译时,函数名不会发生变化函数地址就不会变。

g++编译时,函数名就会发生变化,根据根据函数名,形参个数以及形参类型进行命名,对应的函数地址就会发生变化。就可以对函数名相同的进行区分。

参数默认值

定义

在定义函数时直接给函数赋初始值,调用的时候如果给值,就使用给的值,如果不给值,就使用初始值。

给函数中参数赋初始值规则

1、在定义函数时直接给函数赋初始值时从右往左依次去给,不能跳过。调用时实参与形参的匹配是从左往右依次匹配。

2、当定义函数和函数声明同时出现时,给函数赋初始值只能出现一次,不能重复出现。

C++中引入C的库

方法:在静态库中区分

gcc编译器和g++编译器。

#ifdef  __cplusplus  //两个下划线

extern  C

{

定义函数;

······

}

#else

定义函数;

······

#endif

动态内存分配

申请单个不连续空间

a=new 数据类型; //不初始化

a=new 数据类型(); //初始化

释放单个不连续空间

delete  a;

申请多个连续空间

a=new 数据类型[5]; //不初始化

a=new 数据类型[5](); //初始化

释放单个不连续空间

delete  []  a;

day2

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

对象

数据+操作

具有相同的数据和相同的操作的一组对象的集合

类和对象的关系

是对象的抽象,对象是类的实例

四大特性

1、抽象:通过特定的实例(对象)抽取共同性质后形成概的过程,包括数据抽象和代码抽象。

2、封装把数据和显示操作的代码集中起来放在对象内部,并尽可能隐蔽对象的内部细节,信息屏蔽。

3、继承对象类之间相关的关系,继承类的特征和能力

4、多态不同的对象收到相同的消息时产生多种不同的行为方式。

C语言中的结构体gccC++中结构体g++)的区别?

1、C语言中的结构体中不可以有函数;C++中的结构体中是可以有函数

2、C语言中的结构体为空时,所占内存大小为0C++中的结构体为空时,所占内存大小为1

类的格式

class 类名

{

属性

+

行为

};

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

1、关键字不一样,一个struct一个是class

2、C++中结构体内部的成员默认访问限定符是public共有的)C++中类内部的成员默认访问限定符是private私有的)

3、C++中的类C++中结构体成员的初始化方式不一样。类用构造函数的方式,结构体用集合的方式。

类中3种访问限定符

1、public公有的):类的内部和类的外部都可以访问

2、private私有的):类的外部是不可以访问只能在类的内部使用

3、protected受保护的):类的外部是不可以访问只能在类的内部使用

创建类对象

类名  对象名;

类名  *对象名 = new 类名;

释放类对象空间

delete 对象名

封装

封装的定义

把一类事物的属性和行为用类这个自定义的数据类型包起来public公开的)区域放这一类事物的行为private私有的)区域放这一类事物的属性

封装的格式

class 类名

{

public

行为成员函数)

private

属性数据成员)

protected

......

};

字符串的数据类型

#include<string>

string  名字;//占28个字节

this指针

this指针的定义

是一个指针,用来保存地址;每一个成员函数都有一个隐藏参数,就是这个this指针。当调用这个成员函数的时候,this指针变量保存的是当前对象的地址

作用

形参的名字可能跟类成员名字相同,用this可以对他们进行区分。this->成员

两种访问成员格式

普通对象的访问成员:对象名.成员名;

指针类型的对象访问成员:指针->成员;

类中的特殊的成员

三种特殊的成员

构造函数

析构函数

拷贝构造函数

共同点

如果类的成员中没有这三个成员,系统就会自动生成并根据情况调用。自动生成的都是空的,自动生成的拷贝构造函数属于浅拷贝。

作用

构造函数作用:给对象分配内存空间,并对数据成员进行初始化

析构函数作用:当对象生命周期结束的时候,会帮我们去做对象释放前的清理工作资源回收)。

拷贝构造函数作用:用一个已经存在的对象去初始化一个正在创建的对象的时候会执行类名  新对象名 = 旧对象名;当函数的参数是类类型的对象名时也会执行。(类名  对象名)

构造函数格式

没有函数类型并且函数名和类名是一样的

类名(参数个数不定)   //可以发生重载

{

......

}

三种默认构造函数(互斥,只能存在一个

1、自己没写,系统自动生成的构造函数。

2、自己写的无参构造函数。

3、自己写的构造函数中的每个参数都有默认值。

析构函数格式

函数名和类名一样,在前面要记得加一个符号~,无参

~类名()   //不可以发生重载

{

......

}

拷贝构造函数格式

函数名和类名是一样的,参数有一个,并且是类类型的引用

类名(类名 &)

{

......

}

拷贝构造函数种类

1、浅拷贝:只适用于没有指针类型成员的类。

2、深拷贝:如果类的成员里有指针类型的成员,指针类型的数据成员

需要进行动态开空间进行拷贝的时候就要重新给指针类型的成员分配空间,释放的时候去释放自己的空间。系统生成的拷贝构造函数属于浅拷贝,深拷贝需要自己去写。

执行拷贝构造

的情况

  1. 一个已经存在的对象去初始化一个正在创建的对象的时候
  2. 当函数的参数是类类型的对象名时侯
  3. 当函数的返回值是类类型的时侯
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追求~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值