c++11中using的使用
用法一:命名空间
这种用法估计使用最多的,为了防止定义变量名、函数名冲突,把它们定义在一个命名空间内,使用的时候需要进行命名空间的申明:using namespace std;
延伸:inline namespace
用法二:alias的使用
using 还可以指定别名,比如using SO3d = SO3<double>; 那么它和typedef ,有什么区别?
可读性
我们使用typedef定义函数指针:typedef void (* FUN_) (int, int); 函数指针指向的函数返回值是void,输入参数是int, int型。
我们使用using 定义函数指针:using FUN_ = void(*)(int, int);
using的写法把别名的名字强制分离到了左边,而把别名指向的放在了右边,比较清晰
回顾函数指针的定义:
函数指针基础:
1. 获取函数的地址(即函数名)
2. 声明一个函数指针
3.使用函数指针来调用函数
获取函数指针:
函数的地址就是函数名,要将函数作为参数进行传递,必须传递函数名
函数指针具体见;c++ 函数指针_baidu_16370559的博客-CSDN博客
指定模板的别名,而typedef不行
template<class _scale, int option>
class Person
{
public:
_scale age;
_scale name[option];
};
template<class _T>
using myperson = Person<_T, 6>; // Ok
//typedef Person<_T, 6> myperson; // fail
myperson<int> p;
用法三:子类引用基类成员
1.改变访问权限。
假如子类私有继承父类,子类无法使用父类的成员(变量,函数等),但是使用using可以访问。
class Base
{
public:
void func() { cout << "Hello World" << endl;}
} // private继承会导致 func的可见性为private // 可使用using,改变访问权限 class Sub : private Base
{
public:
using Base::func;
}
2.如果不想隐藏父类的同名方法,可以重写所有同名函数。使用using关键字,即可解决该问题
继承时子类重写父类方法,子类中如果想重写父类函数,比如名为func的函数。并且,假设父类中关于func函数有不同的版本。如果子类中重写一个函数,就会隐藏父类中所有同名函数。此时,只能通过显示方式调用父类的方法。即使,子类重新父类中的虚函数(覆盖),也会导致该问题。
class Base
{public:void func() { // some code}int func(int n) { // some code}
}class Sub : public Base
{public:using Base::func;void func() { // some code}}int main()
{Sub s;s.func();s.func(1); // Success!
}
用法四:使用using来继承基类构造函数
将基类T中的系列构造函数传递到派生类U中。前提是:基类的构造函数是public.注意:继承构造函数只能初始化基类中的数据成员,对于派生类中的数据成员,仍然需要自行处理。
背景:派生类无法继承基类构造函数,当类B继承于类A的时候,它会继承类A中的数据成员与普通成员函数。但是某些成员函数是无法被继承下来的,比如类A(基类)中的合成构造函数(包括构造、析构、拷贝等等)。因此,类B在初始化类A的成员时候,需要显示调用类A的构造函数以达到初始化的目的。
参考:c++ 类与默认函数、包括构造函数和析构函数的特点_baidu_16370559的博客-CSDN博客
class T
{
public:
T() = default;
T(const int &a){}
T(const int &a, float &b){}
};
class U : public T{
public:
using T::T; //using声明基类T的构造函数
int m_b{1}; //C++11新特性-快速初始化成员变量。
};
继承构造函数可能遇到的问题
1.如果基类的构造函数是private属性,那么派生类无法声明基类的继承构造函数。
2.如果派生类是是以虚继承的方式从基类进行派生,在派生类中也无法声明基类的继承构造函数。
3. 当派生类是多继承方式时候,可能会出现继承类冲突隐患。可以通过显式定义继承类的冲突的析构函数。
一旦使用了继承构造函数,编译器就不会为派生类生成默认构造函数了。
原则上,编译器不允许在构造函数中调用构造函数。
派生类中的数据成员初始化的解决的办法主要有两个:
一是使用C++11特性就地初始化成员变量,可以通过=、{}对非静态成员快速地就地初始化,以减少多个构造函数重复初始化变量的工作,注意初始化列表会覆盖就地初始化操作。
二是新增派生类构造函数,使用构造函数初始化列表初始化。
c++11中using的使用相关推荐
- C++11中头文件type_traits介绍
C++11中的头文件type_traits定义了一系列模板类,在编译期获得某一参数.某一变量.某一个类等等类型信息,主要做静态检查. 此头文件包含三部分: (1).Helper类:帮助创建编译时常量的 ...
- C++11中std::async的使用
C++11中的std::async是个模板函数.std::async异步调用函数,在某个时候以Args作为参数(可变长参数)调用Fn,无需等待Fn执行完成就可返回,返回结果是个std::future对 ...
- C++11中std::packaged_task的使用
C++11中的std::packaged_task是个模板类.std::packaged_task包装任何可调用目标(函数.lambda表达式.bind表达式.函数对象)以便它可以被异步调用.它的返回 ...
- C++11中std::shared_future的使用
C++11中的std::shared_future是个模板类.与std::future类似,std::shared_future提供了一种访问异步操作结果的机制:不同于std::future,std: ...
- C++11中std::future的使用
C++11中的std::future是一个模板类.std::future提供了一种用于访问异步操作结果的机制.std::future所引用的共享状态不能与任何其它异步返回的对象共享(与std::sha ...
- C++/C++11中用于定义类型别名的两种方法:typedef和using
类型别名(type alias)是一个名字,它是某种类型的同义词.使用类型别名有很多好处,它让复杂的类型名字变得简单明了.易于理解和使用,还有助于程序员清楚地知道使用该类型的真实目的.在C++中,任何 ...
- C++/C++11中头文件functional的使用
<functional>是C++标准库中的一个头文件,定义了C++标准中多个用于表示函数对象(function object)的类模板,包括算法操作.比较操作.逻辑操作:以及用于绑定函数对 ...
- 概率论中指数分布介绍及C++11中std::exponential_distribution的使用
指数分布:在深度学习中,我们经常会需要一个在x=0点处取得边界点(sharp point)的分布.为了实现这一目的,我们可以使用指数分布(exponential distribution): p(x; ...
- 概率论中高斯分布(正态分布)介绍及C++11中std::normal_distribution的使用
高斯分布:最常用的分布是正态分布(normal distribution),也称为高斯分布(Gaussian distribution): 正态分布N(x;μ,σ2)呈现经典的"钟形曲线&q ...
- 概率论中伯努利分布(bernoulli distribution)介绍及C++11中std::bernoulli_distribution的使用
Bernoulli分布(Bernoulli distribution):是单个二值随机变量的分布.它由单个参数ø∈[0,1],ø给出了随机变量等于1的概率.它具有如下的一些性质: P(x=1)= ø ...
最新文章
- 使用openpyxl处理表格数据
- 代码坏味道 - 耦合
- 【Findbugs】Findbugs使用指南
- 关于Tomcat双击startup.bat文件一闪而过问题
- 用三角函数正交坐标系计算三角级数(傅里叶级数)
- CentOS环境设置Hbase自启动
- Servlet乱码解决
- 1. PSR-1 --- 基本代码规范
- Windows环境下用nmake编译libevent
- python assertequal_python – assertEqual – 两个相同的列表,为什么我得到奇怪的结果?...
- 你应该知道的八款国产操作系统
- 解读arduino读取模拟信号实例
- The destination is read-only
- va_list可变参数理解(va_start/va_end...)
- linux下载测序数据,高速下载测序数据(SRA,Fastq等)
- 编程程软件测试学院3周年 为你破解入职大厂的终极奥秘
- 吉大19年9月计算机应用,吉大19年9月《计算机应用基础》作业考核试题(100分)
- DLink_RCE_CVE-2019-17621浅析
- echart湖南地图
- 计算机 库 英文翻译,计算机专业英文翻译