运算符重载,组合与继承,虚函数与多态知识点总结

                                                                                运算符重载

       使用运算符重载的目的使用户自定义的类型像内置类型一样用运算符进行相应的操作,定义重载运算符与普通函数类似,函数名由关键字operator和要定义的运算符组成,返回类型为运算结果的类型,参数表为提供参与运算的操作数,参数个数取决于操作数函数即是一元运算符还是二元运算符,运算符是成员函数还是非成员函数, 对于非成员函数通常声明为类的友元,运算符函数只有在类类型的对象参与运算时才起作用。

       可以重载的运算符:一元运算符,算数运算符,关系运算符,逻辑运算符,位运算符,赋值运算符,其他运算符。但是对于运算符重载不可滥用,只有在类需要的操作在逻辑上与运算符相关,才可以定义,并且对于逻辑与,或,逗号运算符都是不建议重载的运算符。

        常用运算符的重载:

一元运算符:

例如自增和自减运算符,前缀和后缀形式都会改变对象,不能对常量对象操作,前缀形式返回改变后的对象,后缀形式返回改变之前的值,后缀形式的自增和自减比前缀形式多一个int参数,这个参数在函数中并不使用,只是作为重载函数的标记来区分前缀和后缀运算,重载自增和自减运算符时应同时定义前缀和后缀形式。

重载输入输出运算符:

>>”和“<<”可以用于内置类型数据的I/O流输入和输出,如果希望用户自定义类型以这种方式输入和输出,就需要重载“>>”和“<<”,重载输入输出运算符原型:istream& operator>>(istream&,type&); ostream& operator<<(ostream&,const type&)。

除这些外常用运算符重载还有重载二元运算符,重载赋值运算符,下标运算符等。

                                                                              组合与继承

         组合:将一个类的对象作为另一个类的成员,被称作组合或包含,成员对象是组合对象的一部分,随着组合对象的创建而创建,随着组合对象的撤销而撤销,对象成员初始化:创建包含对象成员的组合对象时,会执行成员类的构造函数初始化对象成员,当组合对象被撤销时,会执行其析构函数,成员对象的析构函数也会被执行,析构函数的执行次序和构造函数相反。

       继承:在已有类的基础上继承得到新类型,这个新类型自动拥有已有类的特性,并可以修改继承到的特性或者增加自己的新特性 ,在C++中,被继承的已有类称为基类;继承得到的新类称为派生类;派生类可以再被继承,这样构成的层次结构称为继承层次。

继承语法:

class 派生类名字 :[访问限定符]  基类名字  {成员声明;};

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

    public  公有继承

   private    私有继承

    protected  保护继承

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

派生类的生成过程经历了三个步骤:

 1  吸收基类成员(全部吸收(构造、析构除外),但不一定可见)

 2  改造基类成员

 3   添加派生类新成员

基类初始化:在创建派生类对象时用指定参数调用基类的构造函数来初始化派生类继承基类的数据

 派生类构造函数:派生类::派生类名(参数总表):基类名(参数表){// 派生类新增成员的初始化语句}

 

多继承:一个类有多个直接基类的继承关系称为多继承

多继承声明语法

class  派生类名 : 访问控制  基类名1访问控制  基类名2 ,  … , 访问控制  基类名n

    {

         数据成员和成员函数声明

    };

赋值兼容规则:赋值兼容规则指在程序中需要使用基类对象的任何地方,都可以用公有派生类的对象来替代。

赋值兼容规则中所指的替代包括以下的情况:

  a 派生类的对象可以赋给基类对象

  b 派生类的对象可以初始化基类的引用

  c 派生类的对象的地址可以赋给基类类型的指针

 

                                                                虚函数与多态

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

重载函数是多态性的一种简单形式。

虚函数允许函数调用与函数体的联系在运行时才进行,称为动态联编。

多态实现的前提就是虚函数,函数的一般形式为:virtual 函数返回值类型 虚函数名(形参表){函数体}

虚函数必须是类的非静态成员函数(且非构造函数),且访问权限是public。并且非类的成员函数不能定义为虚函数,类的成员函数中静态成员函数和构造函数也不能定义为函数,但可以将析构函数定义为虚函数。

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

纯虚函数(一种特殊的虚函数):纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”。

一个具有纯虚函数的类称为抽象类。抽象类对象不能做函数参数,不能创建对象,不能作为函数返回类型;可以声明抽象类指针,可以声明抽象类的引用;子类必须继承父类的纯虚函数才能创建对象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值