继承是使代码能够复用的重要手段,也是面向对象程序设计的核心思想之一。设计
继承就是不修改原有的类,直接利用原来的类的属性和方法并进行扩展。原来的类称为基类,继承的类称为派生类,他们的关系就像父子同样,因此又叫父类和子类。code
通常格式以下:对象
class 派生类名 : 继承类型 基类名
派生类成员能够访问基类的public成员和protected成员。继承
继承类型有三种,共有继承(public),私有继承(private)和保护继承(protected)。接口
共有继承:it
共有继承的特色是基类成员在派生类中都保持原来的状态table
私有继承:程序设计
私有继承的特色是基类中全部成员在派生类中都变为私有成员class
保护继承:扩展
private在派生类中依然存在,但不论以哪一种方法继承基类,派生类都不能直接访问基类的私有成员。
继承方式 | 基类的public成员 | 基类的protected成员 | 基类的private成员 |
---|---|---|---|
public继承 | public成员 | protected成员 | private成员 |
protected继承 | protected成员 | protected成员 | private成员 |
private继承 | private成员 | private成员 | private成员 |
for example:
class Base { //基类 public : int pub; private: int pri; protected : int pro; }; class A : public Base{ //public继承 public : int a; void init() { a = pub; //能够,依然为public成员 a = pro; //能够,依然为protected成员 a = pri; //错误,基类的私有成员在派生类中是不可见的 } }; class B : protected Base{ //protected继承 public : int b; void init() { b = pub; //能够,变为protected成员 b = pro; //能够,依然为protected成员 b = pri; //错误,基类的私有成员在派生类中是不可见的 } }; class C : private Base{ //private继承 public : int c; void init() { c = pub; //能够,变为private成员 c = pro; //能够,变为private成员 c = pri; //错误,基类的私有成员在派生类中是不可见的 } }; int x; A a; x = a.pub; //能够,public继承的public成员是public的,对对象可见 x = a.pro; //错误,public继承的protected成员是protected的,对对象不可见 x = a.pri; //错误,public继承的private成员是private的,对对象不可见 B b; x = b.pub; //错误,protected继承的public成员是protected的,对对象不可见 x = b.pro; //错误,protected继承的protected成员是protected的,对对象不可见 x = b.pri; //错误,protected继承的private成员是private的,对对象不可见 C c; x = c.pub; //错误,protected继承的public成员是private的,对对象不可见 x = c.pro; //错误,protected继承的protected成员是private的,对对象不可见 x = c.pri; //错误,protected继承的private成员是private的,对对象不可见 return 0;