#include <iostream>
using namespace std;
/*---------------------------------
19.25-2.保护继承
变化 | 公有继承 | 保护继承 | 私有继承
基类的公有成员变成 | 派生类的公有成员 | 派生类的保护成员 | 派生类的私有成员
基类的保护成员变成 | 派生类的保护成员 | 派生类的保护成员 | 派生类的私有成员
基类的私有成员变成 | 只能通过基类的接口访问
---------------------------------*/
class A
{
public:
void set(int a,int b){x=a;y=b;}
void show(){ cout<<x<<endl<<y<<endl;}
protected:
int x;
private:
int y;
};
class B:protected A
{
public:
void setb(int a,int b){ set(a,b);} //基类的公有成员函数set被保护派生后,不能直接访问,但可以这样间接访问
void setxy(int a,int b)
{
x=a; //基类的保护成员被保护继承后,能够间接访问
//y=b; //编译报错,基类的私有成员被保护继承后,不可直接访问的,也不能间接访问
}
void showb(){ show();}
};
int main()
{
B b;
//b.set(1,2);//编译报错,基类的公有成员函数set被保护派生后,不能直接访问
//b.show(); //编译报错,基类的公有成员函数show被保护派生后,不能直接访问
/*修改如下*/
b.setb(1,2);
b.showb();
cout<<"----------"<<endl;
b.setxy(3,4);
b.showb();
return 0;
}
运行结果:
1
2
----------
3
2
Press any key to continue