一、using介绍
- 我们介绍过,一个类的成员/方法是否可以供外界访问与其的访问权限限制(public、protected、private)有关
- 在继承关系中,我们可以通过using关键字将一个类的成员/方法改变其在类中的访问性
- using声明可以放在public、protected、private任一个访问说明符下
- 这种using声明只能出现在类的继承中,单独一个类不可以使用
二、演示案例
- 下面的B私有B私有继承于A,所以getNum在B中是private的,我们不能在外界调用
class A {
public:
std::size_t getNum() { return n; };
protected:
std::size_t n;
};
class B :private A{};
int main()
{
B b;
b.getNum(); //错误,因为B私有继承于A,所以getNum在B中是private的
return 0;
}
- 我们在B中使用using将A的getNum声明在public下,此时B的对象就可以在外界调用getNum了
class A {
public:
std::size_t getNum() { return n; };
protected:
std::size_t n;
};
class B :private A{
public:
using A::getNum;
protected:
using A::n;
};
int main()
{
B b;
b.getNum(); //正确:在B中已经声明A的getNum为public了
return 0;
}
三、错误演示案例
- 这种using声明只能出现在类的继承中,单独一个类不可以使用
class A {
public:
std::size_t getNum() { return n; };
protected:
std::size_t n;
};
class B{ //无继承关系
public:
using A::getNum; //错误
protected:
using A::n; //错误
};