C++ using

2023-11-19

一 C++11前的使用

1 using申明

《c++ primer plus》中:

using申明 : using + 限定名称

限定名称:包含名称空间的名称

举例:

using std::cout;

2 using编译指令

举例:

using namespace std;

using 编译指令可以传递。

二 C++11中的使用

1 取代typedef

举例:

using intvec = std::vector<int>;

2 C++11中增加了继承构造函数,在其中有使用using

3 成员函数隐藏场景中使用

2和3举例:

#include <iostream>
#include <vector>

class A {
 public:
  A() :m_(0) {}
  A(int n) :m_(n) {}
  virtual void show() {
    std::cout << "A show" << std::endl;
  }
  virtual void show(int n) {
    std::cout << "A show int " << n << std::endl;
  }

  void test() {
    std::cout << "A test" << std::endl;
  }
  void test(int n) {
    std::cout << "A show test " << n << std::endl;
  }
  int m_;
};

class AA : public A {
 public:
  using A::A;     // 场景2
  using A::show;  // 场景3
  using A::test;  // 场景3
  virtual void show() {
    std::cout << "AA show" << std::endl;
  }
  void test() {
    std::cout << "AA test" << std::endl;
  }
};

int main() {
  AA aa;
  aa.show();
  aa.test();
  aa.show(1);
  aa.test(1);

  return 0;
}

结果:

《c++ primer plus》中:

如果重新定义派生类中的函数,将不只是使用相同的函数参数列表覆盖基类申明,无论参数列表是否相同,该操作将隐藏所有得同名基类方法。
引出两条经验规则:
第一,如果重新定义继承的方法,应确保与原来的原型完全相同,但如果返回类型是基类引用或者指针,则可以修改为指向派生类的引用或指针,这种特性称为返回类型协变(covariance of return type),因为允许返回类型随类型的变化而变化;
第二,如果基类申明被重载了,则应在派生类中重新定义所有的基类版本。

通俗点讲

即注意隐藏的场景:
如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏。
如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏。

 所以上面代码中场景3两句代码注释掉,AA无法调用带参数的test和show函数。

4 别名模板

举例:

// 别名模板
template<class T>
using ptr = T*; 
// 名称 'ptr<T>' 现在是指向 T 指针的别名
ptr<int> x;

三 参考

using

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ using 的相关文章

随机推荐

  • java并查集 - Kaiqisan

    大家好 都吃晚饭了吗 我是Kaiqisan 是一个已经走出社恐的一般生徒 最近被力扣的每日一题给整破防了 天天都是并查集 我麻了 所以最近都在学习并查集 现在终于搞懂了 于是有了这篇博客 文章目录 什么是并查集 代码实现 优化 代码 总结
  • 相机标定-kinectv1外参数标定(没有高度,pnp)

    1 相机镜头表面距离桌面1m 输入的图像没有内参文件 内参和畸变采用freenect包默认参数 棋盘格19 14 每一个4厘米 实际坐标为 左上角 0 0 点 水平向右为x正方向 垂直向下为y轴负方向 2 四个角点分别为 pixel poi
  • centOS 安装 elasticsearch 7.0.0和kibana7.0.0_单机版

    cd opt wget wget https artifacts elastic co downloads elasticsearch elasticsearch 7 0 0 linux x86 64 tar gz tar xzvf ela
  • Matlab 安装和使用xgboost的详细步骤(源码+安装包)

    几个重要的ref 看完后你可以解决你的问题 知乎官网指导 官网讨论 安装MinGW w64 安装需要的模块和源码可以从下面地址下载 链接 https pan baidu com s 1oqCMI7VmVxDzf9Vbaf4VJw pwd 1
  • Arduino与HX711称重传感器握手

    Arduino教程传送门 Arduino与HX711称重传感器握手 1 0 简介 2 0 实验材料 3 0 实验步骤 3 1 根据原理图搭建电路 3 2 新建sketch 拷贝如下代码并进行保存编译上传 3 3 实验现象 4 0 总结 1
  • python基础(更新中)

    文章目录 print函数 数据类型 基本类型 数据拼接 数据转换 条件判断 标识符 关键字 注释 使用帮助 运算符 转义字符 三重引号字符串 字符串格式化 符号格式化字符串 字符串格式的书写 常用格式字符的含义 format 方法格式化字符
  • python loop详解_Python进阶学习笔记(3)-Loop

    while 语法结构 用 隔开 while condition expression x 1 while x lt 4 print x x x 1 Initialize offset offset 8 Code the while loop
  • 硬件基础之电容篇

    一 技术理论 1 电容定义 两个相互靠近的金属板中间夹一层绝缘介质组成的器件 当两端存在电势差时 由于介质阻碍了电荷移动而积累在金属板上 衡量金属板上储存电荷的能力 称为电容 相应的器件称为电容器 电容的符号为C 单位为法拉 F 电容越大
  • 宝塔面板设置域名后无法访问

    设置域名前 需要先备案通过 并解析到宝塔面板的服务器上面才能访问 然后没有做上面相关的时候 设置了域名导致不能访问 解决方式如下 删除域名配置 删除该配置即可 rm f www server panel data domain conf 然
  • HADOOP集群搭建

    1首先新建文件夹路径 root hdp01 home mkdir p home hadoop apps 2修改主机名 vi etc sysconfig network 3配置内网域名映射 vi etc hosts 4配置ssh免密登陆 1在
  • 伴随矩阵及其运算

    关键公式 A B A B
  • mysql jdbc url连接超时_JDBC链接出现超时问题

    今日线上突发一个问题 应用假死 不接受http请求 排查日志 发现有大量的 The last packet successfully received from 异常 首先排查数据库和链接池配置 destroy method close g
  • 利用OpenCV实现软件自动识别核酸检测时间

    文章目录 问题介绍 一 前期准备工作 1 Python的安装 2 安装OpenCV Python开发包 3 安装Tesseract OCR 二 编写程序 1 引入库 2 使用Tesseract做文字识别 OCR 3 筛选日期 4 日期运算
  • 【架构设计】阿里开源架构Cola4.0的项目实践:订单系统

    项目介绍 使用SpringBoot MybaitsPlus Cola 整洁面向对象分层架构 4 0重构订单功能 项目地址 Gitee https gitee com charles ruan smile cola Github https
  • kvm详解【10】:迁移

    文章目录 一 静态迁移 二 动态迁移 一 静态迁移 静态迁移就是虚拟机在关机状态下 拷贝磁盘文件与配置文件到目标虚拟主机中 实现的迁移 分为以下情况 虚拟主机各自使用本地存储存放虚拟机磁盘文件 本文实现基于本地磁盘存储虚拟机磁盘文件的迁移方
  • 值得一看的WinPhone入门系列文章

    今天发现了一些Windows Phone开发入门的系列文章 很适合初学者 下面把其连接总结如下 1 概论 http www winphonecoder com forum php mod viewthread tid 185 extra p
  • buuctf web [ACTF2020 新生赛]Upload

    明了但不明显的文件上传 传个试试 行 抓包吧 php格式不行 就先上传要求的格式 jpg png gif 抓到上传的包之后 再修改成我们想要的 常见的php格式绕过有 php php3 php4 php5 phtml pht 挨个试试 这是
  • Duplicate entry '0' for key 'PRIMARY'的一种可能的解决办法

    在MySQL设计好数据库往往数据库中插入数据的时候 因为主键ID默认是不赋值的 只给其他项目赋值了 相关的SQL代码是这样的 StringBuilder strSql new StringBuilder strSql Append inse
  • 【深度学习】Pytorch 系列教程(十三):PyTorch数据结构:5、数据加载器(DataLoader)

    目录 一 前言 二 实验环境 三 PyTorch数据结构 0 分类 1 张量 Tensor 2 张量操作 Tensor Operations 3 变量 Variable 4 数据集 Dataset 5 数据加载器 DataLoader 一
  • C++ using

    一 C 11前的使用 1 using申明 c primer plus 中 using申明 using 限定名称 限定名称 包含名称空间的名称 举例 using std cout 2 using编译指令 举例 using namespace