码迷,mamicode.com
首页 > 编程语言 > 详细

C++:继承

时间:2016-04-09 17:07:54      阅读:222      评论:0      收藏:0      [点我收藏+]

标签: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++:继承

标签:c++ 继承  

原文地址:http://10921020.blog.51cto.com/10911020/1762068

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!