用法一:命名空间 

这种用法估计使用最多的,为了防止定义变量名、函数名冲突,把它们定义在一个命名空间内,使用的时候需要进行命名空间的申明: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的使用相关推荐

  1. C++11中头文件type_traits介绍

    C++11中的头文件type_traits定义了一系列模板类,在编译期获得某一参数.某一变量.某一个类等等类型信息,主要做静态检查. 此头文件包含三部分: (1).Helper类:帮助创建编译时常量的 ...

  2. C++11中std::async的使用

    C++11中的std::async是个模板函数.std::async异步调用函数,在某个时候以Args作为参数(可变长参数)调用Fn,无需等待Fn执行完成就可返回,返回结果是个std::future对 ...

  3. C++11中std::packaged_task的使用

    C++11中的std::packaged_task是个模板类.std::packaged_task包装任何可调用目标(函数.lambda表达式.bind表达式.函数对象)以便它可以被异步调用.它的返回 ...

  4. C++11中std::shared_future的使用

    C++11中的std::shared_future是个模板类.与std::future类似,std::shared_future提供了一种访问异步操作结果的机制:不同于std::future,std: ...

  5. C++11中std::future的使用

    C++11中的std::future是一个模板类.std::future提供了一种用于访问异步操作结果的机制.std::future所引用的共享状态不能与任何其它异步返回的对象共享(与std::sha ...

  6. C++/C++11中用于定义类型别名的两种方法:typedef和using

    类型别名(type alias)是一个名字,它是某种类型的同义词.使用类型别名有很多好处,它让复杂的类型名字变得简单明了.易于理解和使用,还有助于程序员清楚地知道使用该类型的真实目的.在C++中,任何 ...

  7. C++/C++11中头文件functional的使用

    <functional>是C++标准库中的一个头文件,定义了C++标准中多个用于表示函数对象(function object)的类模板,包括算法操作.比较操作.逻辑操作:以及用于绑定函数对 ...

  8. 概率论中指数分布介绍及C++11中std::exponential_distribution的使用

    指数分布:在深度学习中,我们经常会需要一个在x=0点处取得边界点(sharp point)的分布.为了实现这一目的,我们可以使用指数分布(exponential distribution): p(x; ...

  9. 概率论中高斯分布(正态分布)介绍及C++11中std::normal_distribution的使用

    高斯分布:最常用的分布是正态分布(normal distribution),也称为高斯分布(Gaussian distribution): 正态分布N(x;μ,σ2)呈现经典的"钟形曲线&q ...

  10. 概率论中伯努利分布(bernoulli distribution)介绍及C++11中std::bernoulli_distribution的使用

    Bernoulli分布(Bernoulli distribution):是单个二值随机变量的分布.它由单个参数ø∈[0,1],ø给出了随机变量等于1的概率.它具有如下的一些性质: P(x=1)= ø ...

最新文章

  1. 使用openpyxl处理表格数据
  2. 代码坏味道 - 耦合
  3. 【Findbugs】Findbugs使用指南
  4. 关于Tomcat双击startup.bat文件一闪而过问题
  5. 用三角函数正交坐标系计算三角级数(傅里叶级数)
  6. CentOS环境设置Hbase自启动
  7. Servlet乱码解决
  8. 1. PSR-1 --- 基本代码规范
  9. Windows环境下用nmake编译libevent
  10. python assertequal_python – assertEqual – 两个相同的列表,为什么我得到奇怪的结果?...
  11. 你应该知道的八款国产操作系统
  12. 解读arduino读取模拟信号实例
  13. The destination is read-only
  14. va_list可变参数理解(va_start/va_end...)
  15. linux下载测序数据,高速下载测序数据(SRA,Fastq等)
  16. 编程程软件测试学院3周年 为你破解入职大厂的终极奥秘
  17. 吉大19年9月计算机应用,吉大19年9月《计算机应用基础》作业考核试题(100分)
  18. DLink_RCE_CVE-2019-17621浅析
  19. echart湖南地图
  20. 计算机 库 英文翻译,计算机专业英文翻译

热门文章

  1. 10个要点为Joomla网站创建完善的SEO优化内容
  2. 谷歌浏览器添加扩展程序
  3. js call和apply方法小结
  4. 工作以后就不怎么想学习了
  5. 解决Layui表格需表头固定悬浮的问题
  6. ECharts半圆环形图
  7. java map 容器_java容器-map的常用实现及原理
  8. 暗物质影响星系,有没有影响太阳系
  9. 全网首发:使用安卓MediaCodec Encoder进行编码时的方向问题
  10. 麒麟MIPS:用光盘安装提示Out Of Memory,用U盘安装成功