• C++三大特性


    相信不少入门C++的萌新都会被灌输这么一个理念,那就是C++是面向对象编程,并且有三大特性,继承封装多态。首先我们了解一下这三个特性的大概含义和优缺点,再看看为什么这三个特性是C++独有的而C没有。

    (1)继承:

    C有struct,也能往里面塞函数或者数据,乍一看和C++的class差不多,然而C的struct却不能继承,这是三大特性其一,多了继承这个概念。
    优点:1.减少重复的代码。
         2.继承是多态的前提。
         3.继承增加了类的耦合性。
    缺点:1.继承在编译时刻就定义了,无法在运行时刻改变父类继承的实现;
            2.父类通常至少定义了子类的部分行为,父类的改变都可能影响子类的行为;
            3.如果继承下来的子类不适合解决新问题,父类必须重写或替换,那么这种依赖关系就限制了灵活性,最终限制了复用性。
     
    虚继承:为了解决多重继承中的二义性问题,它维护了一张虚基类表。
     

    (2)封装:

    隐藏对象的属性和实现细节,仅仅对外提供接口和方法。相比较于C,struct中函数和成员数据都是公开的,因为C没有访问限定符public,private,protected这种说法,所以C也无法封装函数或者数据,不让调用者可以直接调用,这是三大特性其二,C++相比C多了封装。
    优点: 1)隔离变化;2)便于使用; 3)提高重用性; 4)提高安全性
    缺点: 1)如果封装太多,影响效率; 2)使用者不能知道代码具体实现。

    (3)多态:

    C++中有两种多态,称为动态多态(运行期多态) 和静态多态(编译期多态),如下图,接下来我们展开讲讲。

    静态多态

    静态多态主要通过函数重载和模板来实现,宏也是实现静态多态的一种途径 。

    函数重载

    int Add(int left, int right)
    {
        return left + right;
    }
    double Add(double left, int right)
    {
        return left + right;
    }
    
    int main()
    {
        Add(10, 20);
        //Add(10.0, 20.0);  //这是一个问题代码
        Add(10.0,20);  //正常代码
        return 0;
    }

    泛型编程

    所以泛型,实质上就是不使用具体数据类型(例如 int、double、float 等),而是使用一种通用类型来进行程序设计的方法,该方法可以大规模的减少程序代码的编写量,让程序员可以集中精力用于业务逻辑的实现。在C++中就是指的模板,模板本身也是多态的一种体现。

    动态多态

    动态多态在C++中是通过虚函数实现的 ,即在基类中存在一些接口(一般为纯虚函数),子类必须重载这些接口。这样通过使用基类的指针或者引用指向子类的对象,就可以实现调用子类对应的函数的功能。动多态的函数调用机制是执行期才能进行确定,所以它是动态的。

    虚函数

    优点:1.大大提高了代码的可复用性;
         2.提高了了代码的可维护性,可扩充性;
    缺点:1.易读性比较不好,调试比较困难
              2.模板只能定义在.h文件中,当工程大了之后,编译时间十分的变态
          
     
     
    第三点多态,主要体现在函数重载,模板和虚函数这三个点,让同一个函数在不同参数的情况下产生不同效果,或者两个继承关系的类的对象调用同一个方法却得到不同的效果。 
     
  • 相关阅读:
    [Reproduced]BIOS -- Basic Input and Output System
    What is CSM mode?
    java.lang.UnsupportedOperationException: Can't convert to color: type=0x2 In TextInputLayout
    What is “passive data structure” in Android/Java?
    Android Studio 手动配置 Gradle
    ScrollView内嵌ListView,ListView显示不全及滑动冲突的问题
    Android安全开发之Provider组件安全
    Android permission and uses-permission
    PriorityBlockingQueue(带优先级的阻塞队列)
    Lesson: Generics (Updated)
  • 原文地址:https://www.cnblogs.com/suxia/p/14216060.html
Copyright © 2020-2023  润新知