zoukankan      html  css  js  c++  java
  • 第八章:多态性

    主要内容:

          1.多态性

          2.运算符重载

          3.虚函数

          4.纯虚函数

          5.抽象类


    多态实现:

      --函数重载

      --运算符重载

      --虚函数

    限制:有些运算符是不可重载的,重载基本是改变操作对象,有基本类型转为user-defined类型。

    实现机制:运算表达式==》运算符函数,运算对象==》运算符函数的实参

    形式:1.重载为类成员函数,此时 参数个数=原操作数-1(后置++,--除外)

              2.重载为友元函数,此时  参数个数 = 原操作数个数,至少有一个用户自定义类型的形参。

    声明形式:

            函数类型  operator 运算符(形参)

           {

            .....

           }

     运算符成员函数的设计:

      1.双目运算符B

        oprd1 B oprd2

       若oprd1 是A类对象 则 oprd1 B oprd2 ==>> oprd1.operator B(oprd2)

       2.前置单目运算符U

        U oprd

        若oprd 为A类对象 ,U 被重载为A类的成员函数 则U oprd ==>> oprd.operator U() 

     3.后置单目运算符++、--

        oprd++ / oprd--

       若oprd为A类对象,++、--被重载为A类的成员函数,且具有一个int类型形参。则 oprd++ ==> oprd.operator++(0)

        为何要这样设计呢???如果不明白,虽然现在看懂了,过后还是忘得?????

      运算符友元函数设计:

       1.双目运算符B

         oprd1 B oprd2 ===> operator B(oprd1,oprd2)

        2.前置单目运算符B

        B oprd ===>operator B(oprd)

        3.后置单目运算符++、--

         oprd B ===>operator B(oprd,0)

        


    静态绑定与动态绑定

       1.绑定: 程序自身彼此关联的过程,确定程序中的操作调用与执行该操作的代码间的关系。

       2.静态绑定(静态联编)

        编译阶段,用对象名或者类名来限定要调用的函数

        3.动态绑定

        运行阶段,程序运行时确定将要调用的函数

    还是不太明白静态编译和动态编译的概念,到底是如何实现动态的编译呢?????


    虚函数:

     本质:不是重载声明而是覆盖

     调用方式:根据指针指向的对象的类,而不是指针本身的类型。


    虚析构函数:

     虚技术与析构函数的合体,这样可以用基类指针delete派生类得对象。


    抽象类

    只要含有纯虚函数的类就是抽象类

    class 类名

    {

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

    }

    NOTE:

      抽象类只能作为基类来使用

      不能声明抽象类的对象

      构造函数能是虚函数,析构函数可以是虚函数(????)

    还有一个疑问:为何构造函数不具有继承特性呢。析构函数呢?析构函数也不具有继承特性。但可以有虚析构函数

  • 相关阅读:
    4.异常捕获后再次抛出
    图像滤镜处理算法:灰度、黑白、底片、浮雕
    JAVA层和JNI层实现Bitmap图镜像功能。
    关于ARGB_8888、ALPHA_8、ARGB_4444、RGB_565的理解
    镜象变换的源代码
    android 图像处理(黑白,模糊,浮雕,圆角,镜像,底片,油画,灰白,加旧,哈哈镜,放大镜)
    android获取项目下的一张图片的绝对路径问题以及解决方法
    fwrite用法
    关于毁灭地球
    memset,memcpy
  • 原文地址:https://www.cnblogs.com/chip/p/4771299.html
Copyright © 2011-2022 走看看