这一篇是对引用的一点补充,内容基本上是来自《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++基础--引用的一点补充的更多相关文章

  1. Java基础知识二次学习-- 第二章 基础语法与递归补充

    第二章 基础语法与递归补充   时间:2017年4月24日10:39:18 章节:02章_01节,02章_02节 视频长度:49:21 + 15:45 内容:标识符,关键字与数据类型 心得:由字母,下 ...

  2. 对于Tomcat服务器环境变量和启动配置的一点补充

    我们之前第一次使用Tomcat服务器运行jsp应用时,曾经给Tomcat配置过一个环境变量CATALINA_HOME,这个变量指定了Tomcat的安装位置,对于多个开发项目,我们一般会释放多个tomc ...

  3. WCF的一点补充-Restful相关

    参考 配置WCF心得 对REST架构 风格下WCF的一点补充 Securing WCF REST Service with Azure AppFabric Access Control Service ...

  4. java基础-引用数据类型之二维数组(Array)

    java基础-引用数据类型之二维数组(Array) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我们学习过了Java的一维数组,所谓的二维数组就是元素是一堆一维数组的数组,换 ...

  5. java基础-引用数据类型之一维数组(Array)

    java基础-引用数据类型之一维数组(Array) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组的定义 1>.为什么需要数组 保存一个数据可以定义一个变量,如果要保 ...

  6. Java基础-引用数据类型之集合(Collection)

    Java基础-引用数据类型之集合(Collection) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么出现集合类 面向对象语言对事物的体现都是以对象的形式,所以为了方便 ...

  7. C++ 基础中的基础 ---- 引用

    C++ 基础中的基础 ---- 引用 引用的概念:引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字.一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量.比如: int n ...

  8. python基础知识16---函数补充

    一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因 ...

  9. python基础之 数据类型的补充,小数据类型

    1.id is详解 ID 在Python中,id是什么?id是内存地址,比如你利用id()内置函数去查询一个数据的内存地址: name = 'nba' print(id(name)) # 158583 ...

随机推荐

  1. 产品原型 UI 设计工具

    产品原型设计工具 Balsamiq Mockups Axure RP 图像处理.绘制工具 ps,AI 跨平台 UI开发工具 QT , Unity3D

  2. LR、SVM、RF、GBDT、XGBoost和LightGbm比较

    正则化 L1范数 蓝色的是范数的解空间,红色的是损失函数的解空间.L2范数和损失函数的交点处一般在坐标轴上,会使\(\beta=0\),当然并不一定保证交于坐标轴,但是通过实验发现大部分可以得到稀疏解 ...

  3. arm linux 移植支持 HP打印机

    背景 由于业务需要,需要hi3531d主板上加入对于HP打印机的支持. 通过与产品经理,技术主管的沟通:通用支持是不现实的,只要求彩色打印,先不考虑打印机的价格,只要支持一款打印机即可. 注意: Li ...

  4. 水费管理系统-ER图和流程图

    ER图:

  5. Docker基本使用运行ngix镜像

    docker pull 项目名 会从docker默认的仓库去拉去项目,如果是docker pull 项目名 地址 会从给定地址拉去镜像 docker run image名字  运行镜像 docker架 ...

  6. centos安装sass环境必看

    首先了解一下  sass是什么?! sass号称“世界上最成熟.最稳定.最强大的专业级css扩展语言” ,sass基于于Ruby语言开发而成,因此安装sass前需要安装Ruby, 1.安装ruby y ...

  7. SpringIOC初始化过程源码跟踪及学习

    Spring版本 4.3.2,ssm框架 代码过宽,可以shift + 鼠标滚轮 左右滑动查看 web.xml <!--配置获取项目的根路径,java类中使用System.getProperty ...

  8. 51nod 1765 谷歌的恐龙

    一开始看到了期望吓半死..然后弱弱的写了一下式子.设∑是出去m项之后的和,∑' 是m项的和. E=(n/m)*(∑'/m)+(n/m)*((n-m)/n)*(∑'/m+∑/(n-m))+(n/m)*( ...

  9. Day7 - K - Biorhythms POJ - 1006

    Some people believe that there are three cycles in a person's life that start the day he or she is b ...

  10. 037、Java中利用判断语句实现三目运算的功能

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...