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中,并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这些对 ...
随机推荐
- python网页爬虫开发之二
1.网站robots robotparser模块首先加载robots.txt文件,然后通过can_fetch()函数确定指定的用户代理是否允许访问网页. 2.识别网站技术 3.下载网页 使用urlli ...
- php多维数组排序
数组 array(11) { [0] => array(7) { ["food_id"] => string(2) "31" ["food ...
- Tomcat 配置详解和优化
2018年01月09日 18:14:41 tianxiaojun2014 阅读数:306 转自:https://www.cnblogs.com/xbq8080/p/6417671.html htt ...
- markdown工具对比: 作业部落 vs Typora
2者都挺优秀的,但是在具体使用时还是遇到一些问题: 功能 作业部落 Typora 图片调整大小 × √ 在线同步,易于分享 √ × pdf对emoji的支持 × √ pdf的text view: Vi ...
- python:爬虫获取淘宝/天猫的商品信息
[需求]输入关键字,如书包,可以搜索出对应商品的信息,包括:商品标题.商品链接.价格范围:且最终的商品信息需要符合:包邮.价格差不会超过某数值 #coding=utf-8 ""&q ...
- python批量处理文件夹中文件的问题
用os模块读取文件夹中文件 原来的代码: import osfrom scipy.misc import imread filenames=os.listdir(r'./unprocess')for ...
- VSCode搭建Java开发运行环境
用了一段时间VSCode,觉得还可以,想用VSCode整合不同的开发语言,于是研究了一下利用VSCode搭建Java环境.开发Java程序.网上这方面的帖子有不少,但每人的经历不同,把自己的经历记下来 ...
- R语言-线图(二)
1.线图示例 plot()为高水平作图命令,axis().lines().legend()都为低水平作图命令 > rain<-read.csv("cityrain.csv&q ...
- 【ESP8266】、ESP8266通讯使用的AT指令
一.AT指令介绍 AT(Attention), AT指令一般应用于终端设备和PC应用之间建立连接.通过AT指令来控制. 二.常用AT指令 AT指令主要分为: 基础AT指令,WIFI功能AT指令,TCP ...
- ajax----tomact服务器运行
一.菜鸟教程的代码本地运行 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...