标签:c++ 继承
继承:
通过继承定义一个类,它们的类型之间的关系建模,共享共有的东西,实现各自本质不同的东西。
C++的“继承”特性可以提高程序的可复用性。
继承定义格式:
总结:
1、基类的private成员在派生类中是不能被访问的。 2、如果基类成员不想在类外直接被访问,但需要在派生类中能访问,就定义为protected。保护成员限定符是因继承才出现的。 3、public继承是一个接口继承,保持is-a原则,每个父类可用的成员对子类也可用,因为每个子类对象也都是一个父类对象。 4、protetced/private继承是一个实现继承,基类的部分成员并非完全成为子类接口的一部分,是 has-a 的关系原则,所以非特殊情况下不会使用这两种继承关系,在绝大多数的场景下使用的都是公有继承。 5、不管是哪种继承方式,在派生类内部都可以访问基类的公有成员和保护成员,基类的私有成员存在但是在子类中不可见(不能访问)。 6、使用关键字class时默认的继承方式是private,使用struct时默认的继承方式是public,不过最好显示的写出继承方式。 7、在实际运用中一般使用都是public继承,极少场景下才会使用protetced/private继承. |
【继承关系中构造函数调用顺序】
【说明】
1、基类没有缺省构造函数,派生类必须要在初始化列表中显式给出基类名和参数列表。
class Base
{
public:
Base(int data)
{ }
};
class Base1
{
public:
Base1(int data)
{ }
};
class Derive: public Base, public Base1
{
public:
Derive()
: Base1(10)
, Base(20)
{ }
};
2、基类没有定义构造函数,则派生类也可以不用定义,全部使用缺省构造函数。
3、基类定义了带有形参表构造函数,派生类就一定定义构造函数。
【继承关系中析构函数调用顺序】
继承体系中的作用域:
1、在继承体系中基类和派生类是两个不同作用域。 2、子类和父类中有同名成员,子类成员将屏蔽父类对成员的直接访问。(在子类成员函数中,可以使用 基类::基类成员 访问)--隐藏 --重定义 3、注意在实际中在继承体系里面最好不要定义同名的成员。 |
继承与转换--赋值兼容规则--public继承
1、子类对象可以赋值给父类对象(切割/切片) 2、父类对象不能赋值给子类对象 3、父类的指针/引用可以指向子类对象 4、子类的指针/引用不能指向父类对象(可以通过强制类型转换完成) |
友元与继承
友元关系不能继承,也就是说基类友元不能访问子类私有和保护成员。 |
继承与静态成员
基类定义了static成员,则整个继承体系里面只有一个这样的成员。 |
标签:c++ 继承
原文地址:http://10921020.blog.51cto.com/10911020/1762068