码迷,mamicode.com
首页 > 编程语言 > 详细

【转】C++ using

时间:2020-01-13 13:12:23      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:列表   clu   https   ring   覆盖   int   type   href   成员   

转自 https://blog.csdn.net/luoshabugui/article/details/86632421


一 C++11前的使用

1 using申明

《c++ primer plus》中:

using申明 : using + 限定名称

限定名称:包含名称空间的名称

举例:

using std::cout;

2 using编译指令

举例:

using namespace std;

using 编译指令可以传递。

二 C++11中的使用

1 取代typedef

举例:

using intvec = std::vector<int>;

2 C++11中增加了继承构造函数,在其中有使用using

3 成员函数隐藏场景中使用

2和3举例:

  1. #include <iostream>
  2. #include <vector>
  3. class A {
  4. public:
  5. A() :m_(0) {}
  6. A(int n) :m_(n) {}
  7. virtual void show() {
  8. std::cout << "A show" << std::endl;
  9. }
  10. virtual void show(int n) {
  11. std::cout << "A show int " << n << std::endl;
  12. }
  13. void test() {
  14. std::cout << "A test" << std::endl;
  15. }
  16. void test(int n) {
  17. std::cout << "A show test " << n << std::endl;
  18. }
  19. int m_;
  20. };
  21. class AA : public A {
  22. public:
  23. using A::A; // 场景2
  24. using A::show; // 场景3
  25. using A::test; // 场景3
  26. virtual void show() {
  27. std::cout << "AA show" << std::endl;
  28. }
  29. void test() {
  30. std::cout << "AA test" << std::endl;
  31. }
  32. };
  33. int main() {
  34. AA aa;
  35. aa.show();
  36. aa.test();
  37. aa.show(1);
  38. aa.test(1);
  39. return 0;
  40. }

结果:

技术图片

《c++ primer plus》中:

如果重新定义派生类中的函数,将不只是使用相同的函数参数列表覆盖基类申明,无论参数列表是否相同,该操作将隐藏所有得同名基类方法。
引出两条经验规则:
第一,如果重新定义继承的方法,应确保与原来的原型完全相同,但如果返回类型是基类引用或者指针,则可以修改为指向派生类的引用或指针,这种特性称为返回类型协变(covariance of return type),因为允许返回类型随类型的变化而变化;
第二,如果基类申明被重载了,则应在派生类中重新定义所有的基类版本。

通俗点讲

即注意隐藏的场景:
如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏。
如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏。

 所以上面代码中场景3两句代码注释掉,AA无法调用带参数的test和show函数。

4 别名模板

举例:

  1. // 别名模板
  2. template<class T>
  3. using ptr = T*;
  4. // 名称 ‘ptr<T>‘ 现在是指向 T 指针的别名
  5. ptr<int> x;

三 参考

using

【转】C++ using

标签:列表   clu   https   ring   覆盖   int   type   href   成员   

原文地址:https://www.cnblogs.com/lzping/p/12186673.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!