C++继承20160214

来源:互联网 发布:淘宝新开店铺骗局 编辑:程序博客网 时间:2024/06/05 17:51

1.公有继承,保护继承,私有继承,多重继承,多继承,虚继承

2. 什么是继承?父类(基类)           子类(派生类)

3.内存中的对象

4. 对于有继承基类的派生类,其构造函数先执行基类的构造函数,再执行派生类的构造函数,而析构函数恰恰相反

    继承是概念上的继承关系,而不是个体的继承

5. 继承方式

公有继承:class A: public B  B中所有的成员都可以被A继承,A可以调用数据成员和成员函数

保护继承:class A: protected B   protected要是没有继承,那么跟private一样。protected是可以被继承

私有继承:class A: private B     private的数据成员被继承到不可见位置。

/************************************公有继承******************************************************/

基类成员访问限定            public               派生类成员访问权限

private                                               不可访问

protected                                           protected

public                                                 public

通过公有的继承方式,无法将私有的数据继承到派生类当中

/************************************保护继承******************************************************/

基类成员访问属性         继承方式           派生类成员访问属性

private                           protected           无法访问

protected                                                 protected

public                                                       protected

当进行保护继承的时候,基类中的数据成员和成员函数都无法直接访问

/************************************私有继承******************************************************/


基类成员访问属性         继承方式           派生类成员访问属性

private                           private                无法访问

protected                                                  private  

public                                                        private  

/*****************************************************************************************************/

6. 覆盖和隐藏

隐藏:父类和子类有同名的数据成员或者成员函数的时候,子类会隐藏父类的同名函数。可以通过特殊手段来访问数据成员或者成员函数

父子关系,成员同名,隐藏

若要调用的是父类同名函数则有

soldier.Person::play();

父类和子类中的同名函数无法形成重载,只能形成隐藏


7. isA

可以用子类初始化父类,基类的指针可以指向派生类

存储结构

1)子类初始化父类。将子类从父类继承下来的数据成员赋给父类,而其他成员则删除。若是用父类指针指向子类对象,那么该指针只能访问继承的数据成员

8. 虚析构函数

当存在继承关系,使用父类指针指向子类。也就是在堆中实例化一个父类对象,父类对象指针指向子类。这个时候delete父类的时候,子类并没有delete回造成内存泄露

添加关键字 virtual(可以被继承)即可

9. 函数传入的参数若是一个对象,会先实例化一个对象(临时变量),在函数调用完后被销毁。而输入的是指针或者是引用的时候,则没有这样的临时对象。

10. 继承与多重继承

一个派生类同时有多个基类:多继承    不写继承方式,默认为private

子类,父类,爷类:多重继承

11. 多继承+多重继承的烦恼

     菱形继承(包含多继承与多重继承)D继承B,C,然后B和C继承A。按照这样子实例化D的话,会使得出现数据冗余(也就是要实例化两个A)

解决数据冗余:虚继承(virtual)

class A: virtual public B

{

}

12.解决重定义:宏定义

#ifndef  PERSON_H

#define  PERSON_H

#endif

13. 虚继承 

只能从顶层父类获得默认的数据



0 0
原创粉丝点击