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:

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

      不能声明抽象类的对象

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

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

  • 相关阅读:
    联想电脑关闭屏幕点亮屏幕(T480为例)
    安卓手机时钟APP推荐
    电脑手机端如何互传文件、图片、网址等
    仿写一个简陋的 IOC/AOP 框架 mini-spring
    类加载之 <clinit>() 和 <init>()
    深入理解Java类加载
    Java垃圾回收
    Java内存区域(运行时数据区域)和内存模型(JMM)
    Java 泛型学习总结
    一篇文章概括 Java Date Time 的使用
  • 原文地址:https://www.cnblogs.com/chip/p/4771299.html
Copyright © 2011-2022 走看看