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 ...
随机推荐
- [Educational Codeforces Round 81 (Rated for Div. 2)]E. Permutation Separation(线段树,思维,前缀和)
[Educational Codeforces Round 81 (Rated for Div. 2)]E. Permutation Separation(线段树,思维,前缀和) E. Permuta ...
- Django(十七):静态文件、中间件
一.静态文件 参考:https://www.cnblogs.com/jiajiaba/p/10584329.html 参考:https://docs.djangoproject.com/zh-hans ...
- 获取QQ群中的所有群友QQ
package com.jm.mail.tools; import java.io.BufferedReader; import java.io.IOException; import java.io ...
- 蓝牙 BLE 协议学习: 001-BLE协议栈整体架构
背景 在深入BLE协议帧之前,我们先看一下BLE协议栈整体架构. 转载自:<深入浅出低功耗蓝牙(BLE)协议栈> 架构 如上图所述,要实现一个BLE应用,首先需要一个支持BLE射频的芯片, ...
- P1092 最好吃的月饼
1092 最好吃的月饼 (20分) 月饼是久负盛名的中国传统糕点之一,自唐朝以来,已经发展出几百品种. 若想评比出一种“最好吃”的月饼,那势必在吃货界引发一场腥风血雨…… 在这里我们用数字说话,给 ...
- 部署 Helm【转】
本节我们将安装和部署 Helm 客户端和 Tiller 服务器. Helm 客户端 通常,我们将 Helm 客户端安装在能够执行 kubectl 命令的节点上,只需要下面一条命令: curl http ...
- 解决使用还原卡的PC在2个月后要重新加入域的问题
客户端正确操作: 1. 启动注册表编辑器. 要这样做, 请依次单击 开始 . 运行 , 类型 regedit 在 打开, 框, 然后单击 确定 . 2. 找到并单击以下注册表子项: HKEY_LOCA ...
- Hexo搭建个人博客及next主题基本配置
前言 国内一些免费的博客平台比如CSDN.博客园都已经很成熟,功能齐全,已经可以满足我们的需求,帮助我们记录学习过程遇到的问题,还能分享帮助其他人解决问题.为什么还要自己动手去搭建博客呢?首先写博客是 ...
- IDE及PHP基础——注释、变量、数据、运算符、输出等
IDE(Integrated Development Environment ),集成开发环境,是用于提供程序开发环境的应用程序,一般包括代码编辑器.编译器.调试器和图形用户界面等工具.集成了代码编写 ...
- centos搭建gitlib
sudo yum install -y curl policycoreutils-python openssh-server sudo yum -y install postfixsudo syste ...