为什么用访问声明?
对于私有继承,基类的公有成员函数变成了派生类的私有成员函数,这时外界就无法利用派生类的对象直接调用基类的成员函数,而只能通过调用派生类的成员函数间接地调用基类的成员函数。
访问声明的作用:
把基类的保护成员或公有成员直接写至私有派生类定义式中的同名段中,同时给成员名前冠以积累名和作用域标识符::
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.对于基类中的重载函数名,访问声明将对基类中所有同名函数起作用
总的来说,访问声明就是把原基类的保护成员调整为私有派生类的保护成员,把原基类的公有成员调整为私有派生类的公有成员
访问声明在私有继承中的应用与注意事项
访问声明使得私有派生类能够暴露基类的保护或公有成员,以便外部可以通过派生类对象调用。它可以把基类的保护成员调整为派生类的保护成员,公有成员调整为公有成员。使用访问声明时应注意,不能对基类的私有成员进行声明,且声明只影响同名函数,不涉及重载。在示例中,访问声明使基类的print函数在派生类中保持公共访问权限。
1302

被折叠的 条评论
为什么被折叠?



