总结:
继承方式:公共继承 保护继承 私有继承
不同继承方式会改变父类原本继承给子类的访问权限
总的来说 私有权限>保护权限>公共权限
公共权限最易被改变 其次是保护 私有权限不会被改变
#include <iostream>
using namespace std;
//父类A 用于测试各个继承
class A {
public:
int pub;
private:
int pri;
protected:
int pro;
};
//公共继承 继承后访问权限不变 父类私有属性c不可访问
class B :public A
{
public:
void fun() {
pub = 10;
pro = 10;
pri = 10;//父类私有权限 无法访问
}
};
//B_继承B
//用于测试子类访问父类各个属性
class B_:public B
{
void fun() {
pub = 10;//父类B的公共权限 子类可以访问
pro = 10;//父类B的保护权限 子类可以访问
pri = 10;//父类私有权限 无法访问
}
};
//用于测试类外访问对象的各个属性情况
void test01() {
B b;
b.pub; //保护权限 类外可以访问
b.pro; //父类保护权限 类外无法访问
b.pri; //父类私有权限 类外无法访问
}
//保护权限 继承后公共权限和保护权限变成保护权限 父类私有属性c不可访问
class C :protected A
{
};
class C_:public C
{
void fun() {
pub = 10;//父类C的公共权限 子类可以访问
pro = 10;//父类C的保护权限 子类可以访问
pri = 10;//父类私有权限 无法访问
}
};
//用于测试类外访问对象的各个属性情况
void test02() {
C c;
c.pub; //保护继承 公共权限变为保护权限 无法访问
}
//私有继承 继承后公共权限和保护权限变成私有权限 父类私有属性c不可访问
class D :private A
{
};
class D_ :public D
{
void fun() {
pub = 10;//父类D的公共权限 子类可以访问
pro = 10;//父类D的保护权限 子类可以访问
pri = 10;//父类私有权限 无法访问
}
};
void test03() {
D d;
d.pub;//公共权限变为私有 无法访问
}
int main() {
return 0;
}