关闭

C++ using关键字作用总结

115人阅读 评论(0) 收藏 举报
分类:

1.在当前文件中引入命名空间

这是我们最熟悉的用法,例如:using namespace std;

2.在子类中使用 using 声明引入基类成员名称(参见C++ primer)

private或者protected继承时,基类成员的访问级别在派生类中更受限:

class Base {
public:
std::size_t size() const { return n; }
protected:
std::size_t n;
};
class Derived : private Base { . . . };

在这一继承层次中,成员函数 size 在 Base 中为 public,但在 Derived 中为 private。为了使 size 在 Derived 中成为 public,可以在 Derived 的 public
部分增加一个 using 声明。如下这样改变 Derived 的定义,可以使 size 成员能够被用户访问,并使 n 能够被 Derived的派生类访问:

class Derived : private Base {
public:
using Base::size;
protected:
using Base::n;
// ...
};

另外,当子类中的成员函数和基类同名时,子类中重定义的成员函数将隐藏基类中的版本,即使函数原型不同也是如此(隐藏条件见下面)。

如果基类中成员函数有多个重载版本,派生类可以重定义所继承的 0 个或多个版本,但是通过派生类型只能访问派生类中重定义的那些版本,所以如果派生类想通过自身类型使用所有的重载版本,则派生类必须要么重定义所有重载版本要么一个也不重定义。有时类需要仅仅重定义一个重载集中某些版本的行为,并且想要继承其他版本的含义,在这种情况下,为了重定义需要特化的某个版本而不得不重定义每一个基类版本,可能会令人厌烦。可以在派生类中为重载成员名称提供 using 声明(为基类成员函数名称而作的 using 声明将该函数的所有重载实例加到派生类的作用域),使派生类不用重定义所继承的每一个基类版本。一个 using 声明只能指定一个名字,不能指定形参表,使用using声明将名字加入作用域之后,派生类只需要重定义本类型确实必须定义的那些函数,对其他版本可以使用继承的定义。

“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:

1、如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)

2、如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)

#include "StdAfx.h"
#include <iostream>
using namespace std;

class Base
{
public:    
   void menfcn()
  {
     cout<<"Base function"<<endl; 
  }

    void menfcn(int n)
    {
     cout<< cout<<"Base function with int"<<endl; 
    }

};

class Derived : Base
{
public:    
using Base::menfcn;//using声明只能指定一个名字,不能带形参表    
int menfcn(int)
{ cout<< cout<<"Derived function with int"<<endl; }
};
int main()
{    Base b; 
     Derived d;   
  b.menfcn();   
  d.menfcn();//如果去掉Derived类中的using声明,会出现错误:error C2660: 'Derived::menfcn' : function does not take 0 arguments    std::cin.ignore(std::cin.gcount()+1);//清空缓冲区    std::cin.get();//暂停程序执行  
}

0
0
查看评论

C++ using关键字作用总结

原文地址:http://www.cnblogs.com/ustc11wj/archive/2012/08/11/2637316.html GDC注:今天在看《C++ Primer中文版第4版》第15.5.3小节时,看到了using的使用。于是就像把C++中using的用法做一下总结。在网上...
  • xiaogugood
  • xiaogugood
  • 2014-03-20 08:51
  • 584

c++11中的using关键字

一般的using关键子我们都是用来声明当前文件的命名空间,比如标准库的命名空间std-> using namespace std; 但在c++11中,它的用处还有几个 1:取代typedef  ,2:让父类同名函数在子类中以重载方式使用 以下是《深入理解c++11》的对1:的截图...
  • yangxuan0261
  • yangxuan0261
  • 2015-11-29 15:20
  • 8930

C++ using关键字作用

1.在当前文件中引入命名空间 2.在子类中使用 using 声明引入基类成员名称(参见C++ primer) 3. 当子类中的成员函数和基类同名时,子类中重定义的成员函数将隐藏基类中的版本,即使函数原型不同也是如此(隐藏条件见下面),使用using声明,解除函数隐藏
  • kaige2111
  • kaige2111
  • 2016-04-25 10:07
  • 170

C++ using关键字作用 (重载父类函数)

1.在当前文件中引入命名空间 这是我们最熟悉的用法,例如:using namespace std; 2.在子类中使用 using 声明引入基类成员名称(参见C++ primer) 在private或者protected继承时,基类成员的访问级别在派生类中...
  • CNHK1225
  • CNHK1225
  • 2015-07-30 16:33
  • 844

using关键字的作用

using关键字 有两种用途一种是作为using指令,另一种是作为using语句。其中 using指令又有两个用途:   (1)允许在命名空间中使用类型,以便您不必限定在该命名空间中使用的类型。   (2)为命名空间创建别名。   ...
  • han_yankun2009
  • han_yankun2009
  • 2013-05-26 15:48
  • 2242

各种C++关键字的作用

一. static static关键字至少有下列5个作用: (1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值; (2)限制变量的作用域,在模块内的static全局变量可以被...
  • liuyanfeier
  • liuyanfeier
  • 2016-10-16 13:18
  • 648

c++11的using关键字。

http://en.cppreference.com/w/cpp/keyword/using Usage using-directives for namespaces and using-declarations for namespace...
  • love_hot_girl
  • love_hot_girl
  • 2014-05-22 13:03
  • 985

C++ 关键字 enum

理解和使用 C++关键字 enum 枚举
  • u011522626
  • u011522626
  • 2014-02-08 16:16
  • 1054

C++using声明和using指示

using声明声明的形式:using namespace_name::name一个using声明一次只引入一个命名空间成员。using std::cout; using std::vector; int main() { int x; cin>>x;//wrong ...
  • mlyjqx
  • mlyjqx
  • 2017-07-08 09:30
  • 606

简述static关键字在c/c++中的作用

在C语言中,关键字static有三个明显的作用: 1)在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变(该变量存放在静态变量区)。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。注...
  • qq_36631758
  • qq_36631758
  • 2017-07-27 12:51
  • 1095
    个人资料
    • 访问:11240次
    • 积分:193
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:34篇
    • 译文:0篇
    • 评论:1条
    最新评论