C++11新标准-5.using的特殊使用(Alias Template)

这篇随笔,我们来讨论一下在C++中(包含新旧语法)using的基本使用和一个比较特殊的使用方式。

1.引入命名空间

可能在C++的初学者眼中,using关键字就是对常见的是这两句代码:

using namespace std;和using std::cout;

当然,这也是using的最基本的使用方法。

2.using关键字在类继承的中的作用

(1)派生类部分覆盖基类的成员函数

在下面的代码中,基类中两个成员函数形成函数重载,在派生类中只对基类的一个成员函数进行了函数覆盖(另一个并没有覆盖),此时在派生类中Func(int)这个函数就被隐藏了,此时如果通过派生类对象调用该方法就会出现编译错误(如下图所示)。

此时,想要以简单的方式解决这个问题(不需要在派生类中重写该方法),只需要在派生类中写一句  using Base::Func;  即可。


(2)在类的私有继承中

在类的继承中,存在一个private继承关系,如下代码所示,私有继承时,基类的成员方法不能在派生类中使用。

如果需要在私有继承的派生类中使用基类的成员方法,可以使用using关键字,在派生类中添加一句代码:         public:  using Base::Func;

3.使用using关键字来定义别名

(1)定义普通类型的别名(与typedef类似)

首先,利用using关键字来定义别名的代码有更好的可读性,看下面的例子:

定义一个函数指针,指向的函数返回值是void,输入参数是int型

可以

可以看出,使用using关键字类似于一种赋值,函数指针的类型也可以更好的识别出来。


(2)使用using指定模板的别名(typedef做不到)

如下的代码,可以看出使用using可以声明一个模板类的别名,但是typedef不行。

最后一个例子是侯捷老师的课程所涉及的using的高级用法。


4.总结

using是C++旧语法中的一个关键字,而在C++11的新标准中赋予了新的意义,灵活的使用using关键字可以解决之前难以解决的问题。

参考

侯捷老师的c++11新特性视频

https://blog.csdn.net/zzyczzyc/article/details/94290574

https://blog.csdn.net/zxc024000/article/details/79438539?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

你可能感兴趣的:(C++11新标准-5.using的特殊使用(Alias Template))