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中,并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这些对 ...
随机推荐
- linux vue项目+npm run build + nginx
系统 环境 vue nginx 步骤 1.打包vue项目 2.配置nginx 打包vue项目 1.项目配置 我们使用服务器的8000端口 2.打包 # npm run build 打包成功会创 ...
- MySQL视图-(视图创建,修改,删除,查看,更新数据)
视图是一种虚拟存在的表,对于使用视图的用户来说基本上是透明的.视图并不在数据库中实际存在,行和列数据来自定义视图的查询总使用的表,并且是在使用视图时动态生成的. 视图相对于普通表的优势: 简单:使用视 ...
- echarts属性的设置(完整大全)
// 全图默认背景 // backgroundColor: ‘rgba(0,0,0,0)’, // 默认色板 color: ['#ff7f50','#87cefa','#da70d6','#32cd ...
- C# Excel添加超链接
操作当前单元格(关键代码就两行) Range range = (Range)ExSheet.Cells[i + 2, j + 1]; ...
- leetcode1
public class Solution { public int[] TwoSum(int[] nums, int target) { ]; ; i < nums.Length; i++) ...
- 2019最新整理PHP面试题附答案
1.什么事面向对象?主要特征是什么?面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰.主要特征:封装.继承.多态. 2.SESSION 与 COOKIE的区别是什么,请从协议, ...
- python学习记录
学习python中······· 今天写了个装饰器用来登录用,用户名和密码是存在文件里的,涉及到了装饰器和带参数的装饰器 文件里的内容如下 {"liming": 123456} { ...
- proposal-cancelable-promises
fetch 从来就没行过,最大的优势就是"新标准",但是 proposal-cancelable-promises 被 withdrawn,就导致了 fetch 发起的请求不可能被 ...
- html5移动端查找
用form包裹住input,修改input的类型为seach,然后给input绑定seach事件,当输入状态是输入键盘上会出现搜索,点击搜索就可以查找了 <form action="& ...
- Codeforces Round #437 C. Ordering Pizza
题意: n个人吃披萨,总共有两种披萨,每种披萨都是有S块,给出每个人要吃的块数,吃第一种披萨能获得的happy值,吃第二种披萨能获得的happy值,问你,在购买的披萨数最少的情况下能获得的最大的总的h ...