1、继承概念
面向对象中的继承指类之间的父子关系
- 子类拥有父类的所有成员变量和成员函数
- 子类就是一种特殊的父类
- 子类对象可以当作父类对象使用
- 子类可以拥有父类没有的方法和属性
示例:
class Parent
{
private:
int a;
public:
Parent()
{
a = 100;
}
void print()
{
cout << "a = " << a << endl;
}
};
class Child : Parent //继承自父类,默认为private继承
{
};
注意:
继承时的访问级别设定会影响到成员的访问级别
- C++中class的继承默认为private继承
- private继承的子类拥有父类的所有成员
- private继承使得父类的所有成员在子类中变为private成员
2、C++中的访问级别与继承
- public继承
- 父类成员在子类中保持原有访问级别
- private继承
- 父类成员在子类中变为private成员
- protected继承
- 父类的private和protected成员在子类中保持不变
- 父类的public成员在子类中变为protected
修改上面的程序,在子类中添加新函数,如下:
class Child : Parent //继承自父类
{
void func()
{
a = 10;
cout << "a = " << a << endl;
}
};
尝试编译运行程序,会得到一些错误:
编译器告诉我们,父类中的a成员变量是私有的,在子类中无法被访问!
那么问题来了?如果想要一个成员变量在外界不能被访问,但是在其类中和其子类中都可以被访问,该怎么办?
新的成员修饰符:protected 受保护成员
- protected成员可以在子类中被访问,但不能在外界被访问
- protected成员的访问权限介于public和private之间
思考:
如何恰当的使用public,protected和private为成员声明访问级别??
类成员访问级别设置的原则
- 需要被外界访问的成员直接设置为public
- 只能在当前类中访问的成员设置为private
- 只能在当前类和子类中访问的成员设置为protected
注意:
private成员在子类中依然存在,但是却无法访问到。
3、继承与访问级别
父类的成员访问级别和子类的继承级别,共同决定了这些成员在子类中的访问级别,该访问级别有如下的公式:
公式:
继承成员对外的访问属性
= Max{ 继承方式, 父类成员访问级别 }