1.c++基础知识

1.c++基础知识

1.指针

1.1空指针和野指针

空指针:指针变量指向内存中编号为0的空间

用途:初始化指针变量

注意:空指针指向的内存是不可以访问的

野指针:指针变量指向非法的内存空间

1.2const修饰指针

1.const修饰指针–常量指针

//指针的指向可以修改,但是指针指向的值不能修改	
const int * p = &a;

2.const修饰常量–指针常量

//指针的指向不可以改,指针指向的值可以改
int * const p = &a;

3.const既修饰指针,又修饰常量

//指针的指向和指针指向的值都不能修改
const int * const p = &a;

1.3指针和数组

作用:利用指针访问数组中的元素

1.4指针和函数

作用:利用指针作函数参数,可以修改实参的值

2.c++核心编程

1.内存分区模型

代码区:存放函数体的二进制代码,由操作系统进行管理的

全局区:存放全局变量和静态变量以及常量

栈区:由编译器自动分配释放,存放函数的参数值,局部变量等

堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收

分区:不同的区域存放不同的数据,赋予不同的声明周期

1.1程序运行前

代码区:存放CPU执行的机器指令

​ 共享

​ 只读

全局区:全局变量和静态变量、常量,该区域的数据在程序结束后由操作系统释放

1.2程序运行后

栈区:

编译器自动分配释放,存放函数的参数值、局部变量

不要返回局部变量的地址,栈区开辟的数据由编译器自动释放

堆区:

程序员分配释放,程序结束时由操作系统回收

使用new关键字

2.引用

2.1引用的基本使用

4.类和对象

4.1封装

4.1.2struct 和class区别

唯一的区别:默认访问权限不同

struct:默认权限为公共

class:默认权限为私有

4.2对象初始化和清理

4.2.1构造函数和析构函数
4.2.2构造函数的分类及调用

两种分类方式:

  • 按参数分:有参构造和无参构造

  • 按类型分:普通构造和拷贝构造

三种调用方式:

  • 括号法
  • 显示法
  • 隐式转换法
Person p = 10;//相当于进行了有参构造
Person p2 = p5;//拷贝构造
4.2.3拷贝构造函数调用时机
  • 使用一个已经创建完毕的对象来 初始化一个新对象
  • 值传递的方式给函数参数传值
  • 以值方式返回局部对象
4.2.4构造函数调用规则

默认情况下,c++编译器至少给一个类添加三个函数

  • 默认构造函数(无参,函数体为空)
  • 默认析构函数(无参,函数体为空)
  • 默认拷贝构造函数,对属性进行值拷贝

构造函数调用规则:

  • 如果用户定义有参构造函数,c++不在提供默认无参构造,但是会提供默认拷贝构造
  • 如果用户定义拷贝构造函数,c++不会再提供其他构造函数
4.2.5深拷贝与浅拷贝

浅拷贝:简单的赋值拷贝操作

深拷贝:在堆区重新申请空间,进行拷贝操作

4.2.6初始化列表
4.2.7类对象作为类成员

c++类中的成员可以是另一个类的对象,我们称该成员为对象成员

构造和析构顺序:

class A{}
class B{
	A a;
}

构造:先A后B(先构造类对象,再构造自身)

析构:先B后A(与构造相反)

4.2.8静态成员
  • 静态成员变量
    • 所有对象共享一份数据
    • 在编译阶段分配内存
    • 类内声明,类外初始化
  • 静态成员函数
    • 所有的对象共享一个函数
    • 静态成员函数只能访问静态成员变量

4.3c++对象模型和this指针

4.3.1成员变量和成员函数分开存储

只有非静态成员变量才属于类的对象上

空对象占用内存空间为1:c++编译器会给每个空对象分配一个字节空间,是为了区分空对象占内存的位置

4.3.2this指针

this指针指向被调用的成员函数所属的对象

this指针的本质是指针常量,指针的指向是不可以修改的

this指针是隐含在每一个非静态成员函数内的一种指针

this指针不需要定义,直接使用即可

this指针的用途:

  • 当形参和成员变量名相同时,可以用this指针来区分
  • 在类的非静态成员函数中返回对象本身,可使用return *this
4.3.3空指针访问成员函数

空指针也可以调用成员函数,但要注意有没有用到this指针

如果用到this指针,需要家一判断保证代码的健壮性

4.3.4const修饰成员函数

常函数:

  • 成员函数后加const后我们称这个函数为常函数
  • 常函数内不可以修改成员属性
  • 成员属性声明时加关键字mutable后,在常函数中可以修改

常对象:

  • 声明对象前加const称该对象为常对象
  • 常对象只能调用常函数

在成员函数后面加const,修饰的是this指针,让指针指向的值也不可以修改

4.4友元

友元的目的就是让一个函数或类,访问另一个类中私有成员

三种实现:

  • 全局函数做友元
  • 类做友元
  • 成员函数做友元

4.5运算符重载

4.5.1加号运算符重载

成员函数重载+

全局函数重载+

对于内置的数据类型表达式的运算符是不可以改变的

4.5.2左移运算符重载

作用:可以输出自定义数据类型

通常不用成员函数重载<<运算符,因为无法实现cout在左侧

只能利用全局函数重载左移运算符

ostream & operator<<(ostream &cout,Person &p)
4.5.3递增运算符重载

前置递增

后置递增

4.5.4赋值运算符重载
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值