C++继承的选择
1 C++的继承有public继承, protected继承和private继承
pulic继承:
class Base1
{
public:
int m_A;
protected:
int m_B;
private:
int m_C;
};
//公共继承
class Son1 :public Base1
{
public:
void func()
{
m_A; //可访问 public权限
m_B; //可访问 protected权限
//m_C; //不可访问
}
};
void myClass()
{
Son1 s1;
s1.m_A; //其他类只能访问到公共权限
}
在子类中可以访问到public和protected 变量和方法,但是在外部只能访问到public区域, 如果想要修改protected变量只能通过子类的方法来改变
class Base1
{
public:
int m_A;
protected:
int m_B;
private:
int m_C;
};
//公共继承
class Son1 :public Base1
{
public:
void func()
{
m_A; //可访问 public权限
m_B; //可访问 protected权限
//m_C; //不可访问
}
void change_protected_var(int data){
m_B = data;
}
};
void myClass()
{
Son1 s1;
s1.m_A; //其他类只能访问到公共权限
s1.change_protected_var(20);
}
protected继承:
//保护继承
class Base2
{
public:
int m_A;
protected:
int m_B;
private:
int m_C;
};
class Son2:protected Base2
{
public:
void func()
{
m_A; //可访问 protected权限
m_B; //可访问 protected权限
//m_C; //不可访问
}
};
void myClass2()
{
Son2 s;
//s.m_A; //不可访问
}
protected继承和public继承的区别在于,是否能够在外部访问public区域, protected继承只能在子类内部对public和protected访问
private继承:
//私有继承
class Base3
{
public:
int m_A;
protected:
int m_B;
private:
int m_C;
};
class Son3:private Base3
{
public:
void func()
{
m_A; //可访问 private权限
m_B; //可访问 private权限
//m_C; //不可访问
}
};
class GrandSon3 :public Son3
{
public:
void func()
{
//Son3是私有继承,所以继承Son3的属性在GrandSon3中都无法访问到
//m_A;
//m_B;
//m_C;
}
};
private继承区别在于完全私有的, 子类继承后不能访问, 即使m_A和m_B之前是public和protected继承
总结:
public,protected,private 关键字, 具体的使用情况不只是和定义有关,也和继承有关