4.3 调整基类成员在派生类中的访问属性的其它方法
4.3.1 同名成员
(1)派生类中定义了与基类成员同名的成员,派生类成员覆盖类基类的同名成员
(2)派生类中使用基类的同名成员
基类名::成员名
4.3.2 访问声明
(1)为什么要使用访问声明
对于私有继承,基类的公有成员函数变成类派生的私有成员函数,
外界无法利用派生类对象直接调用基类的成员函数,
而只能通过派生类的成员函数间接调用基类的成员函数
(2)示例:
#include<iostream>
using namespace std;
class A{
public:
A(int a1,int visit1){
a=a1;
visit=visit1;
}
void print(){
cout<<"A->a = "<<a<<endl;
}
int visit;
private:
int a;
};
class B:private A{
public:
B(int a1,int visit1,int b1):A(a1,visit1){
b1=b;
}
A::print; //基类成员函数的访问声明
A::visit; //基类成员变量的访问声明
private:
int b;
};
int main()
{
B b(10,20,30);
b.print(); //调用基类的成员函数 print
cout<<"A->visit = "<<b.visit<<endl; //调用基类的成员变量 visit
}
运行结果:
(3)访问声明中不带类型和参数的 函数名和变量名
(4)访问声明不改变成员在基类中的访问属性
访问声明只能
把原基类的保护成员调整为私有派生类的保护成员
把原基类的公有成员调整为私有派生类的公有成员
基类的私有成员不能使用访问声明
(5)对于基类的重载函数名,访问声明将对基类所有同名函数起作用