概述
c++最重要的特征是代码重用,通过继承机制可以利用已有的数据类型来定义新的
数据类型,新的类不仅拥有旧类的成员,还拥有新定义的成员。
继承可以减少代码的冗余,提高代码的重用性
继承的格式
派生类定义格式:
class 派生类名 : 继承方式 基类名{
//派生类新增的数据成员和成员函数
};
class 子类 : 继承方式 父类名{
//子类新增的数据成员和成员函数
};
继承方式分类:
public : 公有继承
private : 私有继承
protected : 保护继承
父类个数分类:
单继承:指每个派生类只直接继承了一个基类的特征 (一个父类 派生出 一个子类)
多继承:指多个基类派生出一个派生类的继承关系,多继承的派生类直接继承了不止一个基类的特征(多个父类 派生出 一个子类)
注意:
子类继承父类,子类拥有父类中全部成员变量和成员方法(除了构造和析构之外的成员方法),但是在子类中,继承的成员并不一定能直接访问,不同的继承方式会导致不同的访问权限。
公有继承 public
//设置一个父类
class Base
{
public:
int a;
private:
int b;
protected:
int c;
};
//设置一个子类
class Son:public Base
{
public:
//父类中的public数据 在子类中 也是public
//父类中的private数据 在子类中 是不可见的
//父类中的protected数据 在子类中 是protected的
//子类的内部
void showSon()
{
//b = 200;//不能直接访问
c =300;//在子类 内部是可以访问的
}
};
void test01()
{
//子类的外部
Son ob;
ob.a = 100;
cout<<"父类中的public数据a = "<<ob.a<<endl;
//ob.b = 200;//在子类外 访问不了
//ob.c = 200;//在子类外 访问不了
}
总结:
父类中的public数据 在子类中 也是public
父类中的private数据 在子类中 是不可见的
父类中的protected数据 在子类中 是protected的
(public 继承 父类中的私有数据 在子类 不可见 其他保持原样)
保护继承protected
//保护继承
class Son1:protected Base
{
private:
public:
//父类中的public数据 在子类中 也是protected
//父类中的private数据 在子类中 是不可见的
//父类中的protected数据 在子类中 是protected的
//子类的内部
void showbase(){
a = 100;//子类内部可访问
//b = 200;//不能直接访问
c = 300;//子类内部可访问
}
};
void test02()
{
Son1 ob;
//ob.a;//子类外不可访问
//ob.b;//子类外不可访问
//ob.c;//子类外不可访问
}
总结:
父类中的public数据 在子类中 也是protected
父类中的private数据 在子类中 是不可见的
父类中的protected数据 在子类中 是protected的
(保护继承 父类的私有数据 在子类中 不可见 其他数据 都变保护)
私有继承 private
//保护继承
class Son2:private Base
{
private:
public:
//父类中的public数据 在子类中 也是private
//父类中的private数据 在子类中 是不可见的
//父类中的protected数据 在子类中 是private的
//子类的内部
void showbase(){
a = 100;//子类内部可访问
//b = 200;//不能直接访问
c = 300;//子类内部可访问
}
};
void test03()
{
Son2 ob;
//ob.a;//子类外不可访问
//ob.b;//子类外不可访问
//ob.c;//子类外不可访问
}
总结:
父类中的public数据 在子类中 也是private
父类中的private数据 在子类中 是不可见的
父类中的protected数据 在子类中 是private的
(私有继承 父类中的私有数据在子类中 不可见 其他变成私有)