【C++---面向对象预备】

news2024/11/28 16:48:58

C++---面向对象预备

  • 一 、内存的分区:
    • 1.1 代码区:
    • 1.2 全局区:
    • 1.3 栈区:
    • 1.4 堆区:
  • 二 、引用:
    • 2.1、引用注意事项:
    • 2.2、引用作函数参数:
    • 2.3、引用作函数的返回值:
    • 2.4、引用的本质:
    • 2.5、常量引用:
  • 三 、函数提高
    • 3.1、函数默认参数值:
      • 注意事项:
    • 3.2、函数占位参数:(了解)
    • 3.3、函数重载:
      • 函数重载注意事项:

一 、内存的分区:

1.1 代码区:

所有书写后的代码都会在代码区,存放的是(转化后的二进制代码)

特点:共享,但只读

1.2 全局区:

存放
全局变量(函数体外的变量),
静态变量(普通变量前面加static就是静态变量)
常量字符串常量和const修饰的全局常变量),这三种在内存种的距离比较近

特点:数据的声明周期由系统决定

相应的:
不在全局区中的数据:局部变量,const修饰的局部常变量

1代码区和 2全局区在程序运行前已经存在
程序运行后的3栈区和 4堆区

1.3 栈区:

特点:编译器自动分配和释放,方法进栈(存放函数的形参和局部变量)

栈区数据的注意事项:
不要返回局部变量的地址,因为函数执行完之后局部变量由编译器自动释放(方法弹栈),返回地址属于非法访问

1.4 堆区:

需要程序员自主进行管理和释放,否则在程序结束时候系统自动回收

堆区开辟空间:有new进堆(利用new关键字在堆区开辟空间)

//**利用new关键字在堆区开辟内存空间**
	int *pa=new int(10);//在堆区创建的一个变量是10,**返回的是一个地址**,用指针变量接收

	return pa;//返回一个堆区数据的地址(指针pa也是局部变量,也在栈上,指针指向的数据在堆区)
//在堆区创建一个数据并且使用后的释放:
//堆区数据的自主释放:使用关键字delete
void test1()
{
	int* p = func();
	cout << *p << endl;
	cout << *p << endl;
	cout << *p << endl;
	cout << *p << endl;
	cout << *p << endl;
	delete p;//释放p指向的内存空间
}


//在堆区创建一个数组,使用后及时释放
void test2()
{
	//堆区创建10个整形数据的数组
	int *arr=new int[10];//返回首地址

	for (int i = 0; i < 10; i++)
	{
		arr[i] = i + 100;//赋值100-109
	}
	for (int i = 0; i < 10; i++)
	{
		cout << arr[i] << endl;
	}
	//释放数组的时候需要加个中括号[]
	delete [] arr;

}

不同区存在的意义:不同的区的数据,有不同的声明周期

二 、引用:

作用:给变量起别名

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

在这里插入图片描述

原名是a,别名是b,一个变量有两个名字(a,b是同一块内存空间)

2.1、引用注意事项:

1 引用必须要初始化

int &b;//错误的,必须说明引用是谁的别名

2 引用在初始化后(某变量的别名)不能再改变
在这里插入图片描述

2.2、引用作函数参数:

函数传参的两种方式:(1)值传递(2)地址传递

值传递不能操作实参

地址传递才可以操作实参

引用的作用:函数传参的时候,可以使用引用计数让形参修饰实参(可以对实参进行操作),

优点是不用指针,也可修改实参

数字交换函数:

值传递(是赋值过去的,不能修改实参):

void myswap1(int a, int b)
{
	int temp = a;
	a = b;
	b = temp;
}

修饰实参的两种方法:

(1)地址传递:

void myswap2(int* pa, int* pb)
{
	int temp = *pa;
	*pa = *pb;
	*pb = temp;
}

(2)引用传递:

void myswap3(int &a,int &b)//
{
	int temp = a;
	a = b;
	b = temp;
}

myswap(a,b);//传递实参a,b,对别名操作修改,跟对原名进行操作修改效果一样

2.3、引用作函数的返回值:

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

(1)不要返回局部变量的引用:局部变量函数结束后弹栈消失

(2)函数的调用用可以作为左值
在这里插入图片描述

2.4、引用的本质:

内部实现是一个指针常量(指针指向不能修改,指向的值可以修改)
在这里插入图片描述
因此引用不可以修改

解引用的操作编译器自动实现

2.5、常量引用:

作用:修饰形参,防止误操作

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

三 、函数提高

3.1、函数默认参数值:

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

语法:返回值类型 函数名(形参列表=默认值)

{

}

例子:

int func(int a, int b=5,int c=9)
{
	return a + b + c;
}
int main()
{
	cout << func(1) << endl;
	system("pause");
	return 0;
}

这样,实参的个数可以小于形参的个数

如果传递了,就使用传递的值,没传才使用默认的值。

注意事项:

1 如果某个位置已经有了默认参数值,那么从这个位置往后从左到右的参数,都必须有默认值

2 函数声明函数实现中的参数只能有一个有默认参数值

3.2、函数占位参数:(了解)

c++函数参数列表中可以有占位参数,用来占位,调用函数时候必须填补这个占位参数

语法:

返回值类型 函数名 (数据类型)

{

}

3.3、函数重载:

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

函数重载需要满足的三个条件:

(1)同一个作用域下

(2)函数名称相同

(3)函数参数类型不同 / 个数不同 / 顺序不同

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

函数重载注意事项:

1 引用作为重载条件

2 函数重载遇到函数形参存在默认参数值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/646585.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

explain | 索引优化的这把绝世好剑,你真的会用吗?

对于互联网公司来说&#xff0c;随着用户量和数据量的不断增加&#xff0c;慢查询是无法避免的问题。 一般情况下如果出现慢查询&#xff0c;意味着接口响应慢、接口超时等问题&#xff0c;如果是高并发的场景&#xff0c;可能会出现数据库连接被占满的情况&#xff0c;直接导…

MAC电脑设置权限

​​​​​​​ click on your background to go to finderclick on go and go to folder /usrright click on local and do get infounlock the lock at the bottomclick sign and add your user to the list and give read/write privilegesclick on the gear sign at the …

Java Map 所有的值转为String类型

可以使用 Java 8 中的 Map.replaceAll() 方法将所有的值转为 String 类型&#xff1a; Map<String, Object> map new HashMap<>(); // 添加一些键值对 map.put("key1", 123); map.put("key2", true); map.put("key3", new Date())…

Android Studio入门

首先确保系统已经安装好JDK和Android SDK Android SDK的安装有两种方案 方案一&#xff1a;直接下载包安装 官网下载 国内下载 方案二&#xff1a;使用命令行工具进行安装 在Android Studio官网下载Command line tools 最新&#xff1a;如果使用 Android Studio&#xff0c;…

特征维度降维算法——平均影响值算法(MIV)免费MATLAB代码获取,西储大学数据为例

1. 原理概述 众所周知&#xff0c;常用的特征维度降维方法有主成分分析&#xff0c;因子分析法&#xff0c;平均值影响法。而平均影响值算法&#xff08;MIV&#xff09;是神经网络对输入变量进行降维的最好方法之一。 在神经网络模型实际应用中&#xff0c;由于没有明确的…

高压功率放大器的作用和用途是什么

高压功率放大器是一种用于产生高电压和高功率信号的电子设备&#xff0c;通常采用功率放大器电路来实现。它主要起到以下作用&#xff1a; 提供高电压信号 在一些应用中需要产生高电压信号&#xff0c;如高压变频器、医疗设备等。高压功率放大器可以提供稳定的高电压信号&#…

c4d云渲染几款好用的云渲染平台

C4D是指Maxon公司所开发的3D建模、动画和渲染软件Cinema 4D。它是一款非常流行的三维图形软件&#xff0c;被广泛用于电影、电视、游戏等领域中的动画制作、视觉效果、建筑可视化、工业设计、广告设计、虚拟现实等方面。其用户界面简单易用&#xff0c;功能丰富&#xff0c;可以…

之江实验室: 如何基于 JuiceFS 为超异构算力集群构建存储层 ?

今天&#xff0c;高性能计算结合人工智能技术正在推动科研创新。例如通过破解水稻基因密码推动作物育种从“试验选优”向“计算选优”发展&#xff0c;在医药领域快速分析分子与蛋白之间的相互作用&#xff0c;发现潜在的能够有效干预疾病发生的药物分子。 之江实验室就是上述科…

Apikit 自学日记: Apikit 如何发起测试

进入 API 文档详情页&#xff0c;点击上方 测试 标签&#xff0c;进入 API 测试页&#xff0c;系统会根据API文档自动生成测试界面并且填充测试数据。 填写请求参数 首先填写好请求参数。 请求头部 您可以输入或导入请求头部。批量导入的数据格式为 key : value &#xff0c;…

Linux之多线程(上)——Linux下的线程概念

文章目录 前言一、地址空间和页表1.二级页表2.例子 二、线程1.概念重新理解前面讲的进程&#xff1a;在内核的视角&#xff0c;进程是承担分配系统资源的基本实体。站在CPU角度&#xff0c;能否去识别当前调度的task_struct是进程还是线程&#xff1f;Linux下并不存在真正的线程…

漫谈程序员创业

很多程序员选择辞职创业&#xff0c;成为了自己公司的创始人或者合伙人。他们选择离开原有的公司&#xff0c;是因为想要实现自己的梦想&#xff0c;追求更高的创业成就。辞职创业是一项具有挑战性的决定&#xff0c;需要勇气、决心和毅力。一些成功的创业者通过坚持不懈和不断…

知乎视频发布软件使用方法视频

知乎视频发布软件使用方法视频&#xff0c;知乎批量发布软件效果怎么样 #小红书视频上传#抖音seo软件#网络推广#视频营销 软件有月卡、季卡、半年卡、年卡 【其中推荐&#xff1a;百家号 哔哩哔哩B站&#xff0c;微博等软件发帖】 服务时间&#xff1a;&#xff08;8&#xf…

Win10 IE11浏览器,您正在查看的页使用 Java,Microsoft 网站提供有关 Java 支持的更多信息 解决

最近工作需要支持下IE11浏览器&#xff0c;使用java applet控件。 以前IE10及以下版本都比较正常&#xff0c;但是IE11会出现一些比较奇怪的现象。 记录下解决的方法和过程&#xff0c;便于有需要的同学自取。 1.首先是报错&#xff0c;如下图所示&#xff1b;这个网上搜索了…

B站热点预测,提前解码流量关口

“追热点”是创作者的必修课。互联网信息更迭迅速&#xff0c;热点千变万化&#xff0c;今天是这个明天可能就不热了&#xff0c;或者敏锐度不够的创作者甚至会错过最佳进场时期&#xff0c;反倒蹭了热点但只抹到一点奶油。 与此同时&#xff0c;还很考验创作者对热点的发散性…

Layui禁止表格部分复选框,layui禁止表格自带第一列复选框,layui禁止表格部分复选框,layui获取表格复选框选中数据

前言 禁止某些行可以勾选操作&#xff0c;及选中后的操作和行操作 效果 实现 执行一个table示例 <table id"data_table" class"layui-hide" lay-filter"data_table"></table>cols 的第一列就是需要重写的复选框 table.render({…

为什么针对API的Bot自动化攻击越来越多?

API是连接现代应用程序的基石&#xff0c;越来越多的企业意识到API的重要性&#xff0c;其数量迎来爆发式增长&#xff0c;但API面临的安全威胁却比API调用增长更加迅猛。Salt Security于今年2月发布的报告显示&#xff0c;2022年有91%的公司存在与API相关的安全问题&#xff0…

门禁巨头遭勒索攻击,北约、阿里集团等多个实体受到影响

Cyber News 网站披露&#xff0c;疑似与俄罗斯有关的勒索软件团伙 ALPV/BlackCat 袭击了安全门禁制造商Automatic Systems&#xff0c;北约、阿里巴巴、泰雷兹等多个实体组织可能受到影响。 攻击事件发生后&#xff0c;ALPV/BlackCat 在暗网泄露网站上发布了安全门禁制造商 Aut…

基于Citespace、vosviewer文献计量学发表的论文-让您增加一条轻松搞定SCI论文途径

Citespace和vosviewer是使用最广泛的文献信息可视化软件工具&#xff0c;在理工、经管、法学、教育、农学、文史、医学、艺术等学科中普遍应用&#xff0c;发文量逐年显著上升。理论与实践相结合&#xff0c;通过文献计量学讲解、高效选题、数据库检索数据下载、软件使用等八个…

实战项目!ModbusRTU协议电磁泵驱动器温控器通讯讲解

大家好&#xff0c;我是华山自控编程的朱老师。 在之前的网课中&#xff0c;我们已经讲解了以下内容 1.C#与PLC的串口通讯 2.C#与变频器的通讯 3.C#的服务器和客户端的网络通讯 今天&#xff0c;我要视频和大家分享的是关于C#与我们的电磁泵驱动器以及C#与温控器的Modbus通…

微服务: 01-rabbitmq的应用场景及安装(docker)

目录 1. rabbitmq前言简介: 1.1 RabbitMQ的几个重要作用&#xff1a; -> 1.1.1 解耦&#xff1a; -> 1.1.2 异步通信&#xff1a; -> 1.1.3 流量削峰&#xff1a; -> 1.1.4 消息传递的可靠性和持久性&#xff1a; 2. rabbitmq的安装(docker版) -> 2.1 …