1.使用命名空间
using namespace std;
2.using 与 预处理指令结合
#define isWL 1
void fun()
{
std::cout << "fun" << std::endl;
}
namespace wl
{
void fun()
{
std::cout << "wl::fun" << std::endl;
}
}
namespace wl2
{
#ifdef isWL
using wl::fun;
#elif
using ::fun:
#else
void fun()
{
std::cout << "other fun" << std::endl;
}
#endif
}
int main()
{
wl2::fun();
return 0;
}
3.改变访问权限
class Base
{
public:
void fun()
{
std::cout << "Base ::fun" << std::endl;
}
};
class Child :private Base
{
public:
using Base::fun;
};
int main()
{
Child c;
c.fun();
return 0;
}
由于是private继承,所以f本来Child对象是无法使用fun的,但我们可以使用using改变访问权限。
4.函数重载
在继承过程中,派生类可以覆盖重载函数的0个或多个实例,一旦定义了一个重载版本,那么其他的重载版本都会变为不可见。
如果对于基类的重载函数,我们需要在派生类中修改一个,又要让其他的保持可见,必须要重载所有版本,这样十分的繁琐。
class Base {
public:
void fun() {
std::cout << "f()" << endl;
}
void fun(int n) {
std::cout << "Base::f(int)" << endl;
}
};
class Derived : private Base {
public:
using Base::fun;
void fun(int n) {
std::cout << "Derived::f(int)" << endl;
}
};
int main()
{
Base b;
Derived d;
d.fun();
d.fun(1);
return 0;
}
5.与typedef一样
typedef int ElemenType;
using ElemenType = int;