C++中的 using

来源:互联网 发布:网络是把双刃剑图片 编辑:程序博客网 时间:2024/06/06 01:35

using在c++中有两个用法:

一、使用名字空间。二、使用名字空间的名字。

一使用名字空间

大家都知道,一般常见的

[cpp] view plain copy
 print?
  1. using namespace std;  

完了。

二、使用名字空间的名字。

[cpp] view plain copy
 print?
  1. using std::cin;  
  2. using std::vector;  
就是。

而我想写的是在继承里面using的用处。我知道的有两个,如下:

1)去除个别成员

如果进行private或者protected继承,则基类的访问级别在派生类中更加受限。我们可以使用using恢复继承成员的访问级别。

[cpp] view plain copy
 print?
  1. class Base{  
  2.     public:  
  3.     std::size_t get_size(){ return n;}  
  4.     protected:  
  5.     std::size_t n;  
  6. };  
  7. class Derived:private Base{  
  8.     public:  
  9.     using Base::get_size;//在Derived的public部分增加一个using声明,就可以使get_size本类的public成员。  
  10.     protected:  
  11.     using Base::n;//此时n为protected成员。  
  12. };  
2)重载基类函数

如果派生类想重载基类的函数,要么重定义所有版本,要么一个也不定义。这个是因为派生类定义的函数会覆盖基类的名字。但是我们很多时候只是想重定义其中某些

函数,那么这个规则无疑令人厌烦。

使用 using 就可以解决这个问题。

[cpp] view plain copy
 print?
  1. class Base{  
  2.     public:  
  3.     void test();  
  4.     void test(int );  
  5.     void test(double);  
  6. };  
  7. class Derived:public:Base{  
  8.     public:  
  9.     using Base::test;  
  10.     void test(int ,double );  
  11. };  
  12. int main()  
  13. {  
  14.     Derived d;  
  15.     d.test()  
  16.     d.test(1);  
  17.     d.test(1,1.2);  
  18.     return 0;  
  19. }  

这样就可以成功重载基类的函数。如果去掉using那一行,则程序将在编译时报错:找不到test(),test(int)的版本。
0 0
原创粉丝点击