C++基础--引用的一点补充
这一篇是对引用的一点补充,内容基本上是来自《C++ primer plus》一书第八章的内容。
前面一篇介绍了引用的一点特点,这里补充一个,将引用用于类对象的时候,有一个体现继承的特征,就是当基类引用可以指向派生类对象,而不需要进行类型强转。这个特征有一个用法是在调用一个接收基类引用作为输入参数的函数的时候,可以将基类对象作为参数,也可以将派生类对象作为参数:
class A
{
public:
virtual void prt0();
virtual void prt1()
{
std::cout << "A1" << std::endl;
}
void prt2()
{
std::cout << "A2" << std::endl;
}
protected:
private:
};
class B :public A
{
public:
void prt0()
{
std::cout << "B0" << std::endl;
}
void prt1()
{
std::cout << "B1" << std::endl;
}
void prt2()
{
std::cout << "B2" << std::endl;
}
};
void suibianlala(const A &a)
{
}
A a;
B b;
suibianlala(a);
suibianlala(b);
何时使用引用、指针或者普通参数呢
使用引用参数的原因:
1、可以修改调用函数中的数据对象,也就是修改原变量;
2、运行速度和效率,这个对于数据对象特别大的时候特别明显,比如在做图像处理的时候,有些高清工业图像的大小可以达到上百M甚至更高,这个时候如果用普通的参数,那可想而知光复制一份临时变量就够呛,然后还在占两份内存。
使用传递的值但不修改的情况:
1、数据特别小,且不需要返回修改原变量,比如传一个int,那用普通参数也可以;
2、传数组,这个应该只能用指针吧,引用应该做不了;
3、传数据对象是很大的结构,如果改原变量,用引用或指针;不改,用const指针或const引用;
4、传类对象,建议用const引用,传递类对象参数的标准方式是按引用传递;
修改传递值的情况:
1、传内置数据类型,使用指针;
2、传数组,只能指针;
3、传结构,引用或指针;
4、传类对象,引用。
这些都是君王底
樱桃艳嘴的小歌童:
有的唱出一颗灿烂的明星,
唱不出的,都拆成两片枯骨。
C++基础--引用的一点补充的更多相关文章
- Java基础知识二次学习-- 第二章 基础语法与递归补充
第二章 基础语法与递归补充 时间:2017年4月24日10:39:18 章节:02章_01节,02章_02节 视频长度:49:21 + 15:45 内容:标识符,关键字与数据类型 心得:由字母,下 ...
- 对于Tomcat服务器环境变量和启动配置的一点补充
我们之前第一次使用Tomcat服务器运行jsp应用时,曾经给Tomcat配置过一个环境变量CATALINA_HOME,这个变量指定了Tomcat的安装位置,对于多个开发项目,我们一般会释放多个tomc ...
- WCF的一点补充-Restful相关
参考 配置WCF心得 对REST架构 风格下WCF的一点补充 Securing WCF REST Service with Azure AppFabric Access Control Service ...
- java基础-引用数据类型之二维数组(Array)
java基础-引用数据类型之二维数组(Array) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我们学习过了Java的一维数组,所谓的二维数组就是元素是一堆一维数组的数组,换 ...
- java基础-引用数据类型之一维数组(Array)
java基础-引用数据类型之一维数组(Array) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组的定义 1>.为什么需要数组 保存一个数据可以定义一个变量,如果要保 ...
- Java基础-引用数据类型之集合(Collection)
Java基础-引用数据类型之集合(Collection) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么出现集合类 面向对象语言对事物的体现都是以对象的形式,所以为了方便 ...
- C++ 基础中的基础 ---- 引用
C++ 基础中的基础 ---- 引用 引用的概念:引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字.一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量.比如: int n ...
- python基础知识16---函数补充
一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因 ...
- python基础之 数据类型的补充,小数据类型
1.id is详解 ID 在Python中,id是什么?id是内存地址,比如你利用id()内置函数去查询一个数据的内存地址: name = 'nba' print(id(name)) # 158583 ...
随机推荐
- mysql5.7.26安装
h https://www.cnblogs.com/zgqbky/p/11699282.html 张国强(明了) tar -xf mysql-5.7.26-1.el7.x86_64.rpm-bundl ...
- Python @函数装饰器及用法
1.函数装饰器的工作原理 函数装饰器的工作原理是怎样的呢?假设用 funA() 函数装饰器去装饰 funB() 函数,如下所示: #funA 作为装饰器函数 def funA(fn): #... fn ...
- docker-compose 快速部署Prometheus之服务端并监控ceph cluster 使用钉钉webhook 报警
现在环境是这样: ceph 4台: 192.168.100.21 ceph-node1 192.168.100.22 ceph-node2 192.168.100.23 ceph-node3 1 ...
- swoole之建立 tcp server
一.swoole的安装 参照官网:https://wiki.swoole.com/wiki/page/6.html 二.代码部分 服务端: <?php $host = "127.0.0 ...
- POJ 3371:Flesch Reading Ease 模拟
Flesch Reading Ease Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2071 Accepted: 60 ...
- 【微信小程序】数组操作
Page({ data: { list:[{ id:1, name:'应季鲜果', count:1 },{ id:2, name:'精致糕点', count:6 },{ id:3, name:'全球美 ...
- 通过虚拟机增加Linux的磁盘(分区容量)
因为安装oracle设置的磁盘空间不足,所以安装失败.这里总结一下如何添加磁盘挂载 1. 右键虚拟机点击设置,然后点击磁盘,点击添加按钮 2.然后点击下一步下一步,直到安装成功 3.然后输入 fdis ...
- 012、MySQL取本月第一天日期,取每个月的第一天日期
#取本月第一天 SELECT DATE_ADD( curdate( ), INTERVAL DAY ); #取往后几个月的第一天 , INTERVAL MONTH ); , INTERVAL MONT ...
- maven项目添加配置文件
1. 在src/main/resources下新建param.properties 2. 在param.properties文件中添加 mqtt.host=tcp://127.0.0.1:1883 m ...
- idea基于springboot搭建ssm(maven)
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/liboyang71/article/det ...