二-从C到C++

本章会介绍一些C++拓展的非面向对象的功能
  1. 引用

1 概念

引用从一定程度上讲是指针的平替,几乎被所有的面向对象语言所使用。引用相当于对某一目标变量起“别名”。

操作这个别名,与操作原变量一样。(操作同一块地址)不能有相同别名

#include <iostream>

using namespace std;

int main()
{
    int a = 1;
    // b是a的引用
    int &= a;
   
    cout << a << " " << &<< endl; // 1 0x61fe88
    cout << b << " " << &<< endl; // 1 0x61fe88
    return 0;
}

2 引用的性质

1)可以改变引用的值,但是不能再次成为其他变量的引用

#include <iostream>

using namespace std;

int main()
{
    int a = 1;
    // b是a的引用
    int &= a;
    int c = 3;

    b = c; // 只是单纯的赋值,不是引用,b还是a的引用

    cout << a << " " << &<< endl; // 1 0x61fe88
    cout << b << " " << &<< endl; // 1 0x61fe88
    cout << c << " " << &<< endl; // 1 0x61fe88
    return 0;
}

2)声明引用时,必须要初始化

#include <iostream>

using namespace std;

int main()
{
    int a = 1;

//    int &b; // 错误 引用必须要初始化

    cout << a << " " << &<< endl; // 1 0x61fe88
    // cout << b << " " << &b << endl; // 1 0x61fe88
    return 0;
}

3)声明引用的时候,不能初始化为null

#include <iostream>

using namespace std;

int main()
{
    int a = 1;

//    int &b = NULL; // 错误,引用不能初始化为NULL

    cout << a << " " << &<< endl; // 1 0x61fe88
    // cout << b << " " << &b << endl; // 1 0x61fe88
    return 0;
}

4)声明引用的时候,初始化的值可以是纯数值,但是此时需要使用const关键字修饰引用,表示该引用为常量引用,这样的引用的值不能改变。

#include <iostream>

using namespace std;

int main()
{
    int a = 1;

    const int &= 444;
    // b = 2; // 错误 常量引用的数值不能被改变

    cout << a << " " << &<< endl; // 1 0x61fe88
    cout << b << " " << &<< endl; // 1 0x61fe88
    return 0;
}

5)可以将变量引用的地址赋值给一个指针,此时指针指向的还是原来的变量。

#include <iostream>

using namespace std;

int main()
{
    int a = 1;
    int &= a;
    int *= &b;//指针c

    cout << a << " " << &<< endl; // 1 0x61fe88
    cout << b << " " << &<< endl; // 1 0x61fe88
    cout << *<< " " << c << endl; // 1 0x61fe84
    return 0;
}

6)可以使用const修饰引用,此时如果原变量的值改变,引用的值也改变

#include <iostream>

using namespace std;

int main()
{
    int a = 1;
    const int &= a;
//    b++; // 错误,b是只读的
    a++;

    cout << a << " " << &<< endl; // 2 0x61fe88
    cout << b << " " << &<< endl; // 2 0x61fe88
    return 0;
}

【思考】

写一个函数,函数有两个参数a和b,函数的功能是交换两个传入的参数【原来变量】的值。

#include <iostream>

using namespace std;
//c语言普通模式
void type1(int *a,int *b)
{
    int c;
    c=*a;
    *a=*b;
    *b=c;
}
//c语言异或
void type2(int *a,int *b)
{
    *a=*a^*b;
    *b=*a^*b;
    *a=*a^*b;
}
//不会产生副本
void type3(int &x,int &y)
{
    x=x^y;
    y=x^y;
    x=x^y;

}
int main()
{
    int a = 1;
    int b = 5;

    cout <<"a=" << a  << " " << &<< endl;
    cout <<"b=" << b << " " << &<< endl;
//    type1(&a,&b);//c语言普通模式
//    type2(&a,&b);//c语言异或
    type3(a,b);//不会产生副本
    cout<<"----------------------"<<endl;
    cout <<"a=" << a  << " " << &<< endl;
    cout <<"b=" << b << " " << &<< endl;
    return 0;
}


引用作为参数进行定义的时候,在参数传递时,是不会产生副本的,这样会提高运行效率,我们在正常编程当中,建议使用引用进行传递参数。

引用形参,在不参与计算的情况下,我们建议使用const进行修饰。以达到引用的安全性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ssrf之dict协议和file协议

1.dict协议 dict是什么协议呢&#xff1f; 定义&#xff1a;词典网络协议&#xff0c;在RFC 2009中进行描述。它的目标是超越Webster protocol&#xff0c;并允许客户端在使 用过程中访问更多字典。Dict服务器和客户机使用TCP端口2628。 官方介绍&#xff1a;http://dict.o…

文件监控-IT安全管理软件

文件监控和IT安全管理软件是用于保护企业数据和网络安全的工具。这些工具可以帮助企业监控文件的变化&#xff0c;防止未经授权的访问和修改&#xff0c;并确保数据的安全性和完整性。 一、具有哪些功能 文件监控软件可以实时监控文件系统的活动&#xff0c;包括文件的创建、修…

k8s配置安装ingress服务

k8s配置安装ingress服务 在kuboard页面,网络安装 安装完配置名称保存 apiVersion: networking.k8s.io/v1 kind: Ingress metadata:namespace: testname: pipeline spec:ingressClassName: ingressrules:- host: test.pipeline.comhttp:paths:- path: /pathType: Prefixbacke…

3D视觉-结构光测量法

概述 结构光测量法是一种通过光学投射模块将具有编码信息的结构光投射到物体表面&#xff0c;在被测物表面上形成由被测物体表面形状调制的光条图像&#xff0c;再由图像采集系统采集被测物表面漫反射的光条图像&#xff0c;通过高精度算法处理后&#xff0c;得出被测物表面的三…

oracle与mysql的分析函数(窗口函数)

分析函数定义 在SQL语句中&#xff0c;很多查询语句需要进行GROUP BY分组汇总&#xff0c;但是一旦经过分组&#xff0c;SELECT返回的记录数就会减少。为了保留所有原始行记录&#xff0c;并且仍可以进行分组数据分析&#xff0c;分析函数应运而生。 Oracle 8i 版本开始支持窗…

WebService

调试工具&#xff1a;Postman、SoapUI Soap WebService :.net WCF 、Java CFX WebService三要素&#xff1a; SOAP&#xff08;Simple Object Access Protocol&#xff09;&#xff1a;用来描述传递信息的格式&#xff0c; 可以和现存的许多因特网协议和格式结合使用&#x…

ClickHouse基础知识(六):ClickHouse的副本配置

副本的目的主要是保障数据的高可用性&#xff0c;即使一台 ClickHouse 节点宕机&#xff0c;那么也可以 从其他服务器获得相同的数据。 1. 副本写入流程 2. 配置步骤 ➢ 启动 zookeeper 集群 ➢ 在hadoop101的/etc/clickhouse-server/config.d目录下创建一个名为metrika.xml…

VUE3实现点击按钮下载文件功能

VUE3实现点击按钮下载文件功能 在写vue项目时&#xff0c;有个需求是点击表格中某一行的下载按钮&#xff0c;然后开始下载这一行对应的文件&#xff0c;效果如下&#xff1a; 表格每行的最右侧的蓝色按钮就是点击下载&#xff0c;这里涉及到原生的JavaScript写法&#xff0c;…

Android集成OpenSSL实现加解密-集成

导入so 将编译生成的 OpenSSL 动态库文件&#xff08;.so 文件&#xff09;复制到你的 Android 项目的 libs 目录中 导入头文件 将编译生成的include文件夹导入到项目中 build.gradle添加配置 defaultConfig {……testInstrumentationRunner "androidx.test.runner…

Qt/C++音视频开发62-电子放大/按下选择区域放大显示/任意选取区域放大

一、前言 电子放大这个功能思考了很久&#xff0c;也是一直拖到近期才静下心来完整这个小功能&#xff0c;这个功能的前提&#xff0c;主要得益于之前把滤镜打通了&#xff0c;玩出花样来了&#xff0c;只要传入对应的滤镜字符串&#xff0c;就可以实现各种各样的效果&#xf…

ssrf之curl协议,以及查看curl支持协议的办法

1.curl支持的协议 <?php phpinfo() ?> 将这个内容写在php中 打开小皮运行后可得 用ctrlf搜索curl得 可以查出curl所支持的协议 2.用ssrf获取信息 <?php function curl($url){ $chcurl_init();//创建cURL会话 curl_setopt($ch,CURLOPT_URL,$url);//设置cURL参…

字符串转成时间的SQL,一个多种数据库通用的函数

select date 2010-10-06 from dual; date 函数&#xff0c;此函数适用于&#xff1a; 1.MySQL数据库 2.Oracle数据库 3.达梦数据库 4.人大金仓数据库

重装系统以后无法git跟踪

总结&#xff1a;权限问题 故障定位 解决方案&#xff1a; 复制一份新的文件夹。&#xff08;新建的文件创建和写入权限都变了&#xff09; 修改文件为新的用户 执行提示的命令

OpenCV-Python(21):轮廓特征及周长、面积凸包检测和形状近似

2. 轮廓特征 轮廓特征是指由轮廓形状和结构衍生出来的一些特征参数。这些特征参数可以用于图像识别、目标检测和形状分析等应用中。常见的轮廓特征包括&#xff1a; 面积&#xff1a;轮廓所包围的区域的面积。周长&#xff1a;轮廓的周长&#xff0c;即轮廓线的长度。弧长&…

idea 插件开发之 HelloWorld

前言 本文使用的 idea 2023.3 版本进行插件入门开发&#xff0c;首先要说明的是 idea 2023 版本及以后的 idea&#xff0c;对插件开发进行了一定程度的变动&#xff1a; 1、创建项目时不再支持 maven 选项 2、必须是 jdk17 及以后版本&#xff08;点击查看官网版本对应关系&…

阿里云数据库PolarDB费用价格_MySQL版_PolarDB_分布式版

阿里云数据库PolarDB租用价格表&#xff0c;云数据库PolarDB MySQL版2核4GB&#xff08;通用&#xff09;、2个节点、60 GB存储空间55元5天&#xff0c;云数据库 PolarDB 分布式版标准版2核16G&#xff08;通用&#xff09;57.6元3天&#xff0c;阿里云百科aliyunbaike.com分享…

留言板(Mybatis连接数据库版)

目录 1.添加Mybatis和SQL的依赖 2.建立数据库和需要的表 3.对应表中的字段&#xff0c;补充Java对象 4.对代码进行逻辑分层 5.后端逻辑代码 之前的项目实例【基于Spring MVC的前后端交互案例及应用分层的实现】https://blog.csdn.net/weixin_67793092/article/details/134…

Q-Tester:适用于开发、生产和售后的诊断测试软件

Q-Tester.Expert是一款基于ODX&#xff08;ASAM MCD-2D / ISO 22901-1&#xff09;国际标准的工程诊断仪。通过此诊断仪可实现与ECU控制器之间的数据交互。这一基于ODX国际标准的解决方案&#xff0c;其优势在于&#xff1a;ODX数据库不仅可在开发部门交互&#xff0c;而且可在…

力扣刷题记录(20)LeetCode:198、213、337

198. 打家劫舍 我们从第一个开始分析&#xff1a; dp[i]:i表示索引&#xff0c;dp表示当前索引可以拿到的最高金额 索引为0时&#xff0c;可以拿到的最高金额为1&#xff1b; 索引为1时&#xff0c;可以拿到的最高金额就是在索引[0,1]之间取&#xff0c;为2 索引为2时&…

网络通信连接器

网络通信连接器 常用电子元器件类型 19S101-40ML5 射频连接器 SMD贴片 RF同轴连接器 \GS72V3SO-R SOP8 GS72V3 文章目录 网络通信连接器前言一、网络通信连接器二、19S101-40ML5 射频连接器 SMD贴片 RF同轴连接器三、GS72V3SO-R SOP8 GS72V3总结前言 网络通信连接器是用于在…