c++c++ 学习笔记(基础+封装)

c++ 学习笔记(基础+封装)

这里默认大家都是学习了C语言的,这是我这段时间学习的一部分笔记,希望对大家有所帮助。

前言

博主是大二学生,刚开始学习没多久,有啥错误希望大家评论,共同进步。

 

 

一、c++标准输入输出流

​ 名字空间就是: 隔离, 避免变量名,函数名重复。 因为程序中使用相同的名字会报错, 所以在c++中有了名字空间, 用来隔离相同的名字。

引用

​ 引用(reference) 是c++对C语言一个很重要的扩充,

​ 引用就是一个对象或者变量的别名, 对引用的操作跟对其绑定的变量或者对象的操作方法完全等价。

语法: 类型 & 引用名 = 目标变量名

  1. & 不是取地址运算符只是起到标志作用。

  2. 引用的类型必须与他绑定的变量类型一样

  3. 声明一个引用的同时必须初始化

  4. 引用相当于变量或者对象的别名, 初始化之后不准修改

  5. 引用不能单独存在

好处是不用复制大的对象。

指针的引用:

​ 类型 *&指针引用名 = 指针
在这里插入图片描述
引用做函数参数:
在这里插入图片描述
const:
在这里插入图片描述
代码示例:

​ 权限小的 接受一个权限大的可以
在这里插入图片描述
int consst a = 3; int * p = &a;(×)

​ 解析:指针指向const修饰的变量时,应该是const int const *p = &a;

函数的特性:
在这里插入图片描述

c++ 函数-支持函数重载与缺省参数

​ 在同一个作用域下, C语言不允许出现相同名字的函数。

​ c++:特点一:函数重载:在相同的作用域中, 函数名相同,参数表不同的函数,构成重载关系。

​ 两个要素是:一个是函数名,一个是参数列表,跟参数没关系。

​ 特点二: 缺省参数, 不传参数,就使用默认值。

内联函数:

在这里插入图片描述
内联函数关键字:inline
在这里插入图片描述
内联函数:内联编译是建议性的,由编译器决定。

逻辑简单,调用频繁的函数建议使用内联。

递归函数无法成为内联函数。

动态内存管理

int * p = new int[]; 申请内存块

delete []p; 释放内存块

new 分配

delete 释放

在这里插入图片描述
如果指针未申请内存, 就直接使用,操作系统无法提供资源,会产生空指针异常。

学习面向对象 就知道new 不仅会分配空间, 对类 还会调用构造函数

delete 类对象 会默认调研析构函数

类和对象:

什么是类,什么是对象:

​ 对象是具体的事物 ,而类是从对象中抽象出来的

访问限定符:

​ public:

​ protected:

​ private:

类对象的定义:

在这里插入图片描述
对象成员的访问:
在这里插入图片描述
c++初始String:
在这里插入图片描述
属性封装之初始封装:
在这里插入图片描述
​ 可以对传进去的值进行限制作用

类外定义:

同文件外定义:
在这里插入图片描述

类构造函数和析构函数

对象结构:
在这里插入图片描述
class 类名

{

​ 类名 (形参表)

{

​ 构造函数体

}

成员变量

成员函数

public:属于类的对象可以直接调用

private:只能在内部调用

protected:继承,子类才可以调用

}

构造函数初始化列表:

在这里插入图片描述
初始化列表优先于构造函数执行,初始化列表只能用于构造函数,初始化列表可以同时初始化多个数据成员。
在这里插入图片描述
构造函数不能初始化const限定的值, 但是初始化列表可以。

知识点:

一个类可以没有默认构造函数,有别的构造函数也可以。

当构造函数没有参数时也叫默认构造函数。

当构造函数有参数,但每个参数都有默认值时,也称为默认构造函数。

当实例化对象时,如果不使用任何参数,则调用的是默认构造函数。

拷贝构造函数:

在这里插入图片描述
构造函数总结:
在这里插入图片描述

知识点:

拷贝构造函数的参数是确定的,不能重载。

当没有自定义的拷贝结构函数时,系统自动生成一个拷贝构造函数。

通过同类型的对象实例化另外的对象时,自动调用拷贝构造函数。

拷贝构造函数没有返回值。

析构函数:

在这里插入图片描述
析构函数不允许加任何参数,这个和构造函数不一样。
在这里插入图片描述
析构函数是用于释放类中分配的内存。

知识点:

如果没有自定义的析构函数则系统自动生成。

析构函数在对象销毁时自动调用。

析构函数没有返回值, 没有参数也不能重载。

如果没有自定义的析构函数则系统产生一个析构函数。

堆中对象销毁时,析构函数被自动调用。

栈中对象销毁时,析构函数被自动调用。

析构函数没有参数,也没有返回值。

在这里插入图片描述
梳理知识:
在这里插入图片描述
对象数组:
在这里插入图片描述

知识点:

实例化对象数组时,每一个对象的构造函数都会被执行。

实例化对象数组时,内存既可以从堆上分配,也可以从栈上分配。

销毁对象数组时,每一个对象的析构函数都会被执行。

堆中实例化的数组需要手动销毁释放内存,在栈中实例化的数组,系统自动回收内存。

对象成员:

实例化对象A时,如果对象A有对象成员B, 那么先执行对象B的构造函数,在执行A的构造函数。

如果对象A中有对象成员B,那么销毁对象A时,先执行对象A的析构函数,在执行对象B的析构函数。

如果对象A中有对象成员B,对象B没有默认构造函数,那么对象A必须在初始化列表中初始化对象B。

如果对象A中有对象成员B,对象B没有默认构造函数,那么对象A必须在初始化列表中初始化对象B(原因:因为实例化A时,会先执行B的构造函数,再执行A的构造函数,如若对象B没有默认构造函数,即需要给B的构造函数传递参数才能调用,但是此时A的构造函数还没有执行,因此它还拿不到A构造函数的参数,所以先调用B的构造函数这个过程将无法进行。而初始化列表会先于构造函数的执行对对象成员进行初始化,因此不必再担心B的构造函数拿不到参数而无法执行的问题。因此如果B没有默认构造函数,那么对象A必须在初始化列表中初始化对象B.

``

c++深拷贝和浅拷贝:

浅拷贝:浅拷贝的原理就是把值直接赋值过去。
在这里插入图片描述

深拷贝:将传进来的内存拷贝到分配的内存中
在这里插入图片描述

对象指针:

对象成员指针:

在这里插入图片描述

this指针:

this指针就是指向数据自身的指针。
在这里插入图片描述

知识点:

this指针无需用户定义,是编译器自动产生的。

对象各自的this指针指向各自对象的首地址,所以不同对象的this指针一定指向不同的内存地址。

当成员函数的参数或者临时变量与数据成员同名时,可以使用this指针区分同名的数据成员。

this指针也是指针类型,所以在32位编译器下也占用4个基本的内存单元,即sizeof(this)的结果为4.

常对象成员和常成员函数:

知识点:

只有使用常对象才能调用常成员函数。

常对象只能调用常成员函数,不能调用普通成员函数。

普通对象能够调用常成员函数,也能够调用普通成员函数。

常指针和常引用都只能调用对象的常成员函数。

对象引用和对象常引用都是对象的别名,一个对象可以有多个对象引用。

在这里插入图片描述
后面的内容找时间在跟新吧,毕竟到了期末要复习了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值