为什么用访问声明?
对于私有继承,基类的公有成员函数变成了派生类的私有成员函数,这时外界就无法利用派生类的对象直接调用基类的成员函数,而只能通过调用派生类的成员函数间接地调用基类的成员函数。
访问声明的作用:
把基类的保护成员或公有成员直接写至私有派生类定义式中的同名段中,同时给成员名前冠以积累名和作用域标识符::
eg:
class A{
public:
A(int x1)
{x = x1;}
void print()
{cout<<x;}
private:
int x;
};
class B:private A{
public:
B(int x1, int y1) : A(x1)
{y = y1;}
A::print; //访问声明,把基类的公有成员函数print调整为私有派生类的公有成员函数
private:
int y;
};
int main()
{ B b(1,2);
b.print(); //调用基类的成员函数print
return 0;
}
输出结果:1
关于访问声明需要注意几点:
1.数据成员也可以使用访问声明
2.访问声明中只含不带类型和参数的函数名或变量名
3.不能对基类的私有成员使用访问声明
4.对于基类中的重载函数名,访问声明将对基类中所有同名函数起作用
总的来说,访问声明就是把原基类的保护成员调整为私有派生类的保护成员,把原基类的公有成员调整为私有派生类的公有成员