面向对象程序设计后三章学习总结

 

一、运算符重载

 (一) 运算符重载的定义

  运算符重载就是对现有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。

所谓重载,就是重新赋予新的含义。

形式如下:

返回类型 operator运算符号(形式参数列表)

{

     函数体

}

具体例子:

class complex//复数类

{

    public:

       complex(double r=0.0,double i=0.0)//构造函数

       {real=r;imag=i;}

    private:

        double real;

        double imag;

};

  将‘+’用于复数类的加法运算,运算符函数原型可以是:

  complex operator+(const complex &a,const complex &b);

  调用运算符函数的形式如下:

  operator 运算符号(实参列表);

(二)运算符重载的规则

1、重载运算符的限制

 (1)可以重载的运算符:

+ - * / % ^ & | ~

! = < > += -= *= /= %=

^= &= |= << >> >>= <<= == !=

<= >= && || ++ -- ->* ' ->

[ ] ( ) new delete

 (2)不建议重载的运算符:

逻辑与(&&)、逻辑或(‖)、逗号运算符(,)

 (3)重载运算符函数可以对运算符作出新的解释,但原有基本语义不变:

 1)不改变运算符的优先级

 2)不改变运算符的结合性

 3)不改变运算符所需要的操作数

 4)不能创建新的运算

注:

 1)运算符重载函数不能使用默认参数

 2)重载运算符必须具有一个类对象(或类对象的引用)的参数,不能全部是C++的内置数据类型。

 3)一般若运算结果作为左值则返回类型为引用类型;若运算结果要作为右值,则返回对象。

 4)重载运算符的功能应该与原来的功能一致。

  2、

   将运算符重载为类的成员函数,一般形式为:

  class 类名{ //类体 …… 返回类型 operator 运算符号(形式参数列表) {

  函数体

  } ……

  };

  或

  class 类名{ //类体 …… 返回类型 operator 运算符号(形式参数列表); ……

  }; 

  返回类型 类名::operator 运算符号(形式参数列表) {

  函数体 }

  当运算符重载为友元函数时,运算符函数的形式参数的个数和运算 符规定的运算对象个 数一致。

  形式如下:

  class 类名{ //类体 …… //友元声明 friend 返回类型 operator 运算符号(形式参数列表);

  }; 

 返回类型 operator 运算符号(形式参数列表) {

 函数体 }

二、组合与继承

(一)组合

将一个类的对象作为另一个类的成员,称作组合或包含。

(二)继承

1、继承与派生的概念

一个新类从已有的类那里获得其已有特性,这种现象称为继承。

从已有的类产生一个新的子类,称为类的派生。

一个派生类只从一个基类派生称为单继承;

一个派生类有两个或多个基类称为多继承。

  2、派生类的声明方式

声明派生类的一般形式为:

<span style="font-family: 'Microsoft YaHei'; background-color: rgb(255, 255, 255);"><strong>class 派生类名: [继承方式] 基类名

{

    派生类新增加的成员;

};</strong>

</span>

   3、 派生类的构成

    (1)从基类接收成员;接收基类的全部成员,但不包括构造函数和析构函数。

    (2)调整从基类接收的成员。指定继承方式调整访问属性。在派生类中声明一个与基类成员同名的成员,则新成员会覆盖基类的同名成员。

 

    (3)在声明派生类时增加成员。自己搞定构造函数和析构函数。

4、 三种继承方式:

    (1) 公用继承 基类的公用成员和保护成员保持原有的访问属性,其私有成员仍为基类所私有,派生类不可访问。

    (2) 私有继承 基类的公用成员和保护成员成为派生私有成员,只有派生类成员函数能够访问,派生类外不能访问,其私有成员仍为基类所私有,派生类不可访问。

    (3) 保护继承 公用成员和保护成员成为派生类保护成员,其私有成员仍为基类所私有,派生类不可访问。

三、虚函数与多态

(一)多态性

    多态性可以简单概括为“一个接口,多种行为”。

    向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法)。

     多态分为两种:

     1、编译时多态:主要通过函数的重载和模板来实现。

     2、运行时多态:主要通过虚函数来实现。

  多态性(Polymorphism)是指一个名字,多种语义;或界面相同,多种实现。、

   (二)动态联编

 1、虚函数和基类指针

 写有关键字virtual的成员函数称为虚函数,实现运行多态的关键是要说明虚函数,另外必须用基类指针调用派生类的不同实现版本。

 2、虚函数的重载特性

 在派生类中重载基类的虚函数要求函数名、返回类型、参数个数、参数类型和顺序完全相同, 如果仅仅返回类型不同,C++认为是错误重载,如果函数原型不同,仅函数名相同,丢失虚特性

 3、虚析构函数

 构造函数不能是虚函数。建立一个派生类对象时,必须从类层次的根开始,沿着继承路径逐个调用基类的构造函数, 析构函数可以是虚的。虚析构函数用于指引 delete 运算符正确析构动态对象

  (三)纯虚函数和抽象类

 纯虚函数是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。

 纯虚函数是一个在基类中说明的虚函数,在基类中没有定义, 要求任何派生类都定义自己的版本。

 纯虚函数为各派生类提供一个公共界面

 纯虚函数说明形式:

    virtual 类型 函数名(参数表)= 0 ;

 一个具有纯虚函数的基类称为抽象类。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值