using五大用法
1.命名空间
using namespace 命名空间;//这样每次使用命名空间中的变量时就不用指定命名空间了
注意:头文件中不应有using命名空间的声明
2.类型别名(C++11)
using aa = double;//等价于typedef double aa
typedef double db, *p;//db是double的同义词,p是double*的同义词(注意)
3.改变从基类继承来的成员的访问级别
class base {
public:
int fun(int x);
int b;
}; class son : private base {
public:
using base::fun; //fun(int x)由private变成public(注意:using不指定参数列表)
protected:
using base::b; //b由public变成protected
};
4.让派生类对基类中所有的重载函数都可见,而不是隐藏
class base {
public:
void func()
{
cout << "func1()" << endl;
}
void func(int x)
{
cout << "func2()" << endl;
}
}; class son : public base {
public:
using base::func; //若没有此句,func()和func(int x)将会被隐藏
void func(int x, int y)
{
cout << "func()3" << endl;
}
};
5.第4点的升级,using可让派生类继承直接基类所有的构造函数
1)派生类并非以常规方式继承基类的构造函数,而是要使用using声明让派生类继承基类的所有的(有两个例外)构造函数
2)例外一:派生类自己的构造函数与基类的某个构造函数有相同的形参,则该构造函数不会被继承
例外二:默认、拷贝和移动构造函数不会被继承
3)与第3点不同,using声明不会改变继承的构造函数的访问级别:不管using声明出现在哪,基类的共有/受保护/私有构造函数在派生类中还是一个共有/受保护/私有构造函数,
4)using声明不能指定explicit和constexpr:如果基类的构造函数是explicit或constexpr,则继承的构造函数也拥有相同的属性
5)继承的构造函数不算自定义的构造函数,所以仍然可以满足合成构造函数的生成规则
6)如果基类的构造函数有默认实参,则实默认参不会被继承
7)如果基类的构造函数有两个形参,一个形参没有默认实参,另一个形参有默认实参,则通过继承会获得两个构造函数:一个构造函数有两个形参,另一个只有一个形参(对应没有默认实参的那个),总之,默认实参都不会被继承
class base {
public:
base() {}
base(string s, int a) {}
}; class son : public base {
public:
using base::base;//继承直接基类所有的构造函数,对于基类的每个构造函数,编译器都在派生类中生成一个形参完全相同的构造函数
//using不能指定explicit和constexpr
private:
//使用继承来的构造函数时,如果派生类有自己的数据成员,则这些成员将被默认初始化
string str;
int num;
}; //等价于:
class son : public base {
public:
son():base() {}
son(string s, int a): base(s, a) {}
};
using五大用法的更多相关文章
- redis五大类型用法
Redis五大类型:字符串(String).哈希/散列/字典(Hash).列表(List).集合(Set).有序集合(sorted set)五种Controller:@Resource RedisTe ...
- Redis详解(三)------ redis的五大数据类型详细用法
我们说 Redis 相对于 Memcache 等其他的缓存产品,有一个比较明显的优势就是 Redis 不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据 ...
- Redis 详解 (三) redis的五大数据类型详细用法
目录 1.string 数据类型 2.hash 数据类型 3.list 数据类型 4.set 数据类型 5.zset 数据类型 6.系统相关命令 7.key 相关命令 我们说 Redis 相对于 Me ...
- 第四节: Quartz.Net五大构件之Trigger通用用法(常用方法、优先级、与job关联等)
一. 简介 1. 几个类型: ①:TriggerBuilder:用来创建ITrigger实例 ②:ITrigger:触发器实例 2.常用的几个方法 ①.StartNow:Trigger马上触发. ②. ...
- 【redis】redis五大类 用法 【转载:https://www.cnblogs.com/yanan7890/p/6617305.html】
转载地址:https://www.cnblogs.com/yanan7890/p/6617305.html
- 《Redis入门指南(第二版)》读书思考总结之Redis五大数据类型
热身:系统级命令 1. 获得符合规则的键名列表 KEYS pattern 模式匹配 产品的缓存:product+"."+....; => keys product* 订单的 ...
- Android中的五大布局
Android中的五大布局 1.了解布局 一个丰富的界面总是要由很多个控件组成的,那我们如何才能让各个控件都有条不紊地 摆放在界面上,而不是乱糟糟的呢?这就需要借助布局来实现了.布局是一种可用于放置很 ...
- Android——五大布局
Android的五大布局分为: 线性布局 相对布局 帧布局 绝对布局 表格布局 一.线性布局 线性布局在开发中使用最多,具有垂直方向与水平方向的布局方式 通过设置属性"android:ori ...
- Redis详解(五)------ redis的五大数据类型实现原理
前面两篇博客,第一篇介绍了五大数据类型的基本用法,第二篇介绍了Redis底层的六种数据结构.在Redis中,并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这些对 ...
随机推荐
- Ext.NET Grid Group分组使用
- 需要注意的是, 涉及到分页排序, 最好定义GroupDir 方向与分组方式相同. - 譬如工资表按照最新最前分页输出. 如果分组按照默认排序的话, 最就最前. - 界面呈现出2015年, 2016 ...
- centos 全局环境变量设置
CentOS的环境变量配置文件体系是一个层级体系,这与其他多用户应用系统配置文件是类似的,有全局的,有用户的,有shell的,另外不同层级有时类似继承关系.下面以PATH变量为例. 1.修改/etc/ ...
- VMware 2017 v14.x 永久许可证激活密钥
FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA CV7T2-6WY5Q-48EWP-ZXY7X-QGUWD
- 20165304 2017-2018-2《Java程序设计》学习总结
20165304 2017-2018-2<Java程序设计>学习总结 一.每周作业及实验报告链接汇总 1.我期望的师生关系 2.20165304学习基础和C语言基础调查 3.linux系统 ...
- mysql 使用注意
1. consider upgrading MySQL client 描述:因mysql5版本过度到8版本后,访问要求升级mysql的客户端 原因:mysql在升级后,对加密算法部分做了调整导致. 对 ...
- Android Studio模拟器磁盘空间不足(Not enough disk space to run AVD)
在Android Studio中运行模拟器时,提示Error: Not enough disk space to run AVD '....'. Exiting.是说安装模拟的磁盘空间不足,导致无法运 ...
- resize2fs
VPS是15G的..但是dh和fdisk显示不一样..求解 df:Filesystem Size Used Avail Use% Mounted onudev 236M 0 236M 0% /devt ...
- SpringCloud-day02-服务消费者项目建立
4.4microservice-ticket-consumer-80服务消费者项目建立 我们新建一个服务器提供者module子模块,类似前面建的common公共模块,名称是 microservice- ...
- Spark升级--在CDH-5.15.1中添加spark2
一.环境准备 jdk-1.8+scala-2.11.X+python-2.7 二.创建目录 mkdir -p /opt/cloudera/csd 修改权限 chown cloudera-scm:clo ...
- [leetcode]41. First Missing Positive第一个未出现的正数
Given an unsorted integer array, find the smallest missing positive integer. Example 1: Input: [1,2, ...