• C++ using


    【转自】 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

  • 相关阅读:
    接口 抽象类 小记
    java 强制转换
    java 多态
    this super 解释
    Java多态性理解
    final与static
    java动态联编
    什么是继承
    JAVA的覆盖、继承和多态的详细解说.this和super的用法
    java继承覆盖总结
  • 原文地址:https://www.cnblogs.com/lzping/p/12186673.html
Copyright © 2020-2023  润新知