C++核心编程

本文深入探讨C++的核心和面向对象编程技术,涵盖内存分区模型、引用、函数提升、类与对象的细节,如封装、构造函数、析构函数、拷贝构造、深拷贝与浅拷贝、友元、运算符重载、继承与多态等。通过实例解析,帮助理解C++中对象模型、this指针的使用,以及文件操作的基本方法。
摘要由CSDN通过智能技术生成

本阶段主要针对C++面向对象编程技术做详细讲解,探讨C++中的核心和精髓

目录

1.内存分区模型

1.1 程序运行前

1.2程序运行后

1.3 new操作符

2. 引用

2.1引用的基本使用

2.2 引用注意事项

2.3 引用做函数参数

2.4 引用做函数返回值

2.5 引用的本质

2.6 常量引用

3. 函数提高

3.1 函数默认参数

3.2 函数占位参数

3.3 函数重载

3.3.1函数重载概述

3.3.2 函数重载注意事项

4. 类和对象

4.1 封装

4.1.1 封装的意义

4.1.2 struct和class区别

4.1.3 成员属性设置为私有

4.2 对象的初始化和清理

4.2.1 构造函数和析构函数

4.2.2 构造函数的分类及调用

4.2.3 拷贝构造函数调用时机

4.2.4 构造函数调用规则

4.2.5 深拷贝和浅拷贝

4.2.6 初始化列表

4.2.7 类对象作为类成员

4.2.8 静态成员

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

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

4.3.2 this指针概念

4.3.3 空指针访问成员函数

4.3.4 const修饰成员函数

4.4 友元

4.4.1 全局函数做友元

4.4.2 类做友元

4.4.3 成员函数做友元

4.5 运算符重载

4.5.1 加号运算符重载

4.5.2 左移运算符重载

4.5.3 递增运算符重载

4.5.4 赋值运算符重载

4.5.6 函数运算符重载

4.6 继承

4.6.1 继承的基本语法

4.6.2 继承方式

4.6.3 继承中的对象模型

4.6.4 继承中构造和析构顺序

4.6.5 继承同名成员处理方式

4.6.6 继承同名静态成员处理方式

4.6.7 多继承语法

4.6.8 菱形继承

4.7 多态

4.7.1 多态的基本概念

4.7.2 多态案例----计算机类

4.7.3 纯虚函数和抽象类

4.7.4 多态案例--制作饮品

4.7.5 虚析构和纯虚析构

4.7.6 多态案例--电脑组装

5 文件操作

5.1文本文件

5.1.1写文件

5.1.2 读文件

5.2二进制文件

5.2.1写文件

5.2.2读文件


1.内存分区模型

C++程序在执行时,将内存大方向划分为4个区域

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

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

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

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

内存四区意义:

不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程

1.1 程序运行前

在程序编译后,生成了exe可执行操作,未执行该程序前分为两个区域

代码区:

存放CPU执行的机器指令

代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可

代码区是只读的,使其只读的原因是防止程序意外地修改它的指令

全局区:

全局变量和静态变量存放在此

全局区还包括了常量区,字符串常量和其他常量也存放在此

该区域的数据在程序结束后由操作系统释放

示例:

打印结果:

总结:

1>C++中在程序运行前分为全局区和代码区

2>代码区特点是共享和只读

3>全局区中存放全局变量、静态变量、常量

4>常量区中存放 const修饰的全局变量和字符串常量

1.2程序运行后

栈区:

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

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

示例:

堆区:

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

在C++中主要利用new在堆区开辟内存

示例:

总结:

堆区数据由程序员管理开辟和释放

堆区数据利用new关键字进行开辟内存

1.3 new操作符

C++中利用new操作符在堆区开辟数据

堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符 delete

语法: new 数据类型

利用new创建的数据,会返回该数据对于的类型的指针

示例1:基本语法

示例2:开辟数组

2. 引用

2.1引用的基本使用

作用:给变量起别名

语法:数据类型 &别名 = 原名

示例:

2.2 引用注意事项

1>引用必须要初始化

2>引用在初始化后,不可以改变

示例:

2.3 引用做函数参数

作用: 函数传参时,可以利用引用的技术让形参修饰实参

优点: 可以简化指针修改实参

示例:

总结:通过引用参数产生的效果同按地址传递是一样的,引用的语法更清楚简单

2.4 引用做函数返回值

作用:引用是可以作为函数的返回值存在的

注意:不要返回局部变量引用

用法:函数调用作为左值

示例:

2.5 引用的本质

本质:引用的本质在C++内部实现是一个指针常量

示例:

总结:C++推荐用引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器都帮我们做了

2.6 常量引用

作用:常量引用主要用来修饰形参,防止误操作

在函数形参列表,可以加const修饰形参,防止形参改变实参

示例:

3. 函数提高

3.1 函数默认参数

在C++中,函数的形参列表中的形参是可以有默认值的。

语法 : 返回值类型 函数名 (参数= 默认值) {}

示例:

3.2 函数占位参数

C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置

语法: 返回值类型 函数名 (数据类型){ }

示例:

3.3 函数重载

3.3.1函数重载概述

作用:函数名可以相同,提高复用性

函数重载满足条件:

1>同一个作用域下

2>函数名称相同

3>函数参数类型不同或者个数不同或者顺序不同

注意:函数的返回值不可以作为函数重载的条件

示例:

3.3.2 函数重载注意事项

1>引用作为重载条件

2>函数重载碰到函数默认参数

示例:

4. 类和对象

C++面向对象的三大特性为:封装、继承、多态

C++认为万事万物都皆为对象,对象上有其属性和行为

例如:

人可以作为对象,属性有姓名、年龄、身高、体重.....,行为有走、跑、吃饭、唱歌.....

车也可以作为对象,属性有轮胎、方向盘、车灯.....,行为有载人、放音乐....

具有相同性质的对象,我们可以抽象称为类,人属于人类,车属于车类

4.1 封装

4.1.1 封装的意义

封装是C++面向对象三大特征之一

封装的意义:

1>将属性和行为作为一个整体,表现生活中的事务

2>将属性和行为加以权限控制

封装意义一:

在设计类的时候,属性和行为写在一起,表现事物

语法:

class 类名{ 访问权限: 属性 / 行为 };

示例1:设计一个圆类,求圆的周长

示例2:设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号

封装意义二:

类在设计时,可以把属性和行为放在不同的权限下,加以控制

访问权限有三种:

1.public 公共权限 类内可以访问,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值