C++中的 using
2016-07-31 20:39
309 查看
using在c++中有两个用法:
一、使用名字空间。二、使用名字空间的名字。
一使用名字空间
大家都知道,一般常见的
[cpp] view
plain copy
print?
using namespace std;
完了。
二、使用名字空间的名字。
像
[cpp] view
plain copy
print?
using std::cin;
using std::vector;
就是。
而我想写的是在继承里面using的用处。我知道的有两个,如下:
1)去除个别成员
如果进行private或者protected继承,则基类的访问级别在派生类中更加受限。我们可以使用using恢复继承成员的访问级别。
[cpp] view
plain copy
print?
class Base{
public:
std::size_t get_size(){ return n;}
protected:
std::size_t n;
};
class Derived:private Base{
public:
using Base::get_size;//在Derived的public部分增加一个using声明,就可以使get_size本类的public成员。
protected:
using Base::n;//此时n为protected成员。
};
2)重载基类函数
如果派生类想重载基类的函数,要么重定义所有版本,要么一个也不定义。这个是因为派生类定义的函数会覆盖基类的名字。但是我们很多时候只是想重定义其中某些
函数,那么这个规则无疑令人厌烦。
使用 using 就可以解决这个问题。
[cpp] view
plain copy
print?
class Base{
public:
void test();
void test(int );
void test(double);
};
class Derived:public:Base{
public:
using Base::test;
void test(int ,double );
};
int main()
{
Derived d;
d.test()
d.test(1);
d.test(1,1.2);
return 0;
}
这样就可以成功重载基类的函数。如果去掉using那一行,则程序将在编译时报错:找不到test(),test(int)的版本。
一、使用名字空间。二、使用名字空间的名字。
一使用名字空间
大家都知道,一般常见的
[cpp] view
plain copy
print?
using namespace std;
完了。
二、使用名字空间的名字。
像
[cpp] view
plain copy
print?
using std::cin;
using std::vector;
就是。
而我想写的是在继承里面using的用处。我知道的有两个,如下:
1)去除个别成员
如果进行private或者protected继承,则基类的访问级别在派生类中更加受限。我们可以使用using恢复继承成员的访问级别。
[cpp] view
plain copy
print?
class Base{
public:
std::size_t get_size(){ return n;}
protected:
std::size_t n;
};
class Derived:private Base{
public:
using Base::get_size;//在Derived的public部分增加一个using声明,就可以使get_size本类的public成员。
protected:
using Base::n;//此时n为protected成员。
};
2)重载基类函数
如果派生类想重载基类的函数,要么重定义所有版本,要么一个也不定义。这个是因为派生类定义的函数会覆盖基类的名字。但是我们很多时候只是想重定义其中某些
函数,那么这个规则无疑令人厌烦。
使用 using 就可以解决这个问题。
[cpp] view
plain copy
print?
class Base{
public:
void test();
void test(int );
void test(double);
};
class Derived:public:Base{
public:
using Base::test;
void test(int ,double );
};
int main()
{
Derived d;
d.test()
d.test(1);
d.test(1,1.2);
return 0;
}
这样就可以成功重载基类的函数。如果去掉using那一行,则程序将在编译时报错:找不到test(),test(int)的版本。
相关文章推荐
- C语言中内存分配
- C++ 中的模板类声明头文件和实现文件分离后,如何能实现正常编译?
- c++ amp
- C++ AMP
- C语言MFC system 第一例
- C++基础小程序——走向程序员的第一步
- C++引用计数思想--利用引用计数器自定义String类
- c++ 有道api做翻译
- C++11读书笔记—4(右值系统引论,老C++的若干大坑)
- c++继承父类的子类,如何调用父类的同名函数?
- 【C语言】模拟实现strcpy、strcat、strcmp函数
- 删除std::String类型字符串首尾空格
- 使用栈来实现符号平衡----c语言实现
- C语言str函数系列
- c++中的string常用函数用法总结!
- C++ sizeof的使用总结
- C语言::模拟实现strlen函数
- C++11多线程之packaged_task
- C++函数系列篇:函数的默认值+带默认参数的函数
- 数据封装和处理--C语言