c++学习总结(五)——继承

一、心得体会

    之前的代码在定义类时,如果需要多次用到某一个类,都需要反复定义使用它,但继承的学习却弥补这一缺点。集成式面向对象程序设计中软重用的关键技术。继承机制使用已经定义的类作为基础建立新的类定义,新的类时原有类的数据及操作与新类所增加的数据及操作的组合。新的类把原有类作为基类引用,而不需要修改原有类的定义。新定义的类作为派生类引用。这种课扩充、可重用技术大大降低了大型软件的开发难度。

二、内容及实例

8.1类之间的关系

    继承:在已有类的继承上创建新类的过程

    一个B类继承A类,或称从类A派生类B。类A称为基类(父类),类B称为派生类(子类)

8.2基类和派生类

    C++中,描述类继承关系的语句格式为:

            class   派生类名:基类名表

            {

                    数据成员和成员函数说明

            };

基类名表  构成

    访问控制 基类名1,访问控制 基类名2,...,访问控制 基类名n

访问控制表示派生类对基类的继承方式,使用关键字:

    public    公有继承

    private    私有继承

    protected    保护继承

8.2.1访问控制

不论哪种方式继承基类,派生类都不能直接使用基类的私有成员

1.派生类的生成过程

    (1)吸收基类成员

        在c++的继承机制中,派生类吸收基类中除析构函数和析构函数之外的全部成员。

    (2)改造基类成员

        通过在派生类中定义同名成员(包括成员函数和数据成员)来屏蔽(隐藏)在派生类中不起作用的部分基类成员。

    (3)添加新成员

        仅仅继承基类的成员是不够的,需要在派生类中添加新成员,以保证派生类自身特殊属性和行为的实现。

例:

#include<iostream>
using namespace std;


class A
{
    public:
        int a;
        int b;
    private:
        int c;
    protected:
        int d;
};
class B:public A
{
    int c;
};
int main()
{
    cout<<"size of A is"<<sizeof(A);
    cout<<"size of B is"<<sizeof(B);

}

1.公有继承

    以公有方式继承的派生类,基类的public和protected成员在派生类中的性质不变。即派生类中可以使用基类中定义的public和protected成员;并且,基类的公有成员也是派生类对象的借口,可以在类模块之外被访问。

2.私有继承

    以私有方式继承的派生类,基类的public和protected成员会成为派生类的私有成员,即基类中定义的public和protected成员只能在私有继承的派生类中可见,而不能再类外使用。

3.保护继承

    保护把基类的公有成员和保护成员作为派生类的保护成员,使其在派生类中被屏蔽。保护继承和私有继承方式在程序设计中应用较少。原因是,继承的目的是软件重用,如果有需要屏蔽的成员,通常在类中被定义为私有的或保护的成员。

4.访问声明

    C++提供一种访问调节机制,是一些本来在派生类中不可见的成员变为可访问的,称为访问声明。

        访问声明的格式为:

            基类名::成员

8.2.2    重名成员

    C++允许派生类的成员与基类成员重名。在派生类中访问重名成员是,屏蔽基类的同名成员。如果要在派生类中使用基类的同名成员,可以显式地使用作用域符指定,格式如下:

        类名::成员

1.重名数据成员

    如果在派生类中定义了与基类相同的名字的数据成员,根据继承规则,在建立派生类对象时,系统会分别建立不同的存储空间。

例:
class  base
  { 
      public :
           int  a ,  b ;  
  } ;
class  derived : public  base
  { 
      public :  
         int  b ,  c ; 
  } ;
void  f ()
{ derived  d ;
   d.a = 1 ;
   d.base :: b = 2 ;
   d.b = 3 ;
   d.c = 4 ;
};

2.重名成员函数

    在派生类中定义与基类同名的成员函数,称为在派生类中重载基类的成员函数。由调用形式指示this指针的不同类型,调用不同版本的成员函数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值