zoukankan      html  css  js  c++  java
  • c++三大特性:封装,继承,多态

    【1】封装:

    封装是设计类的基本原理,把抽象出来的数据和功能结合起来,去形成一个类。

    数据和函数都是类的一个成员,它的主要目标就是使得代码模块化,在类中有public,protect,private三种类型的关键字,把类的成员做权限的管理,隐藏内部的实现,给出外部的接口。

    比如说有些人写代码不提供任何的public的数据成员,而是用设置成private,然后通过设计读写的函数去访问,这就是封装。

    public:父类对象、子类对象的内部外部都可以去访问。

    protected:父类对象,子类对象的内部可以访问,但是外部不可以。

    private:只有父类对象内部,才可以访问。

    【2】继承

    扩展:https://www.cnblogs.com/EvansPudding/p/12565699.html

    继承的意义在于扩展已经存在的类,来达到代码重用的目的。

    一个类B继承自另一个类A,那B就被称为A的子类。继承可以让子类拥有父类的属性和方法,不需要额外在写,可以根据需要重新定义某个属性(定义同名的数据成员,此时在派生类中存在俩个同名的数据成员,一个属于基类,一个属于自己,如果要调用基类的数据成员,就必须加上类名::),或者是重写(就是和基类的方法,返回值、参数、函数名都相同,否则就是重载)某个方法(方法在类中也就是函数)

    继承有三种方式,也是public、protected、private。

    这里要注意,无论是那种继承,都不影响子类堆父类的访问权限,如果之前父类的成员是private的,即使你是public的继承,依然不能访问。

    这个继承方式是为了控制子类的调用方,也就是用户,对于父类的访问权限。

    具体说:public继承,public的权限还是public。如果是protected继承,父类的public成员在自己类中就变成了protected的访问控制权限,private继承,父类的public和protected成员在自己类中变成了private访问控制权限。

    友元关系是不能被继承的。

    友员在类中声明,在类外实现的函数,或者是类。友员允许访问类中一切的成员。

    【3】多态

    多态的简单理解就是一个接口,多种实现。(C++本身没有接口这个概念)

    (1)一种是函数重载(overload):在编译期间,决定函数的调用(也被成为静态多态)

    1. 相同的作用域,比如说再同一个类中
    2. 函数名字相同,参数不同列表
    3. virtual关键字可有可无
    4. 不关心函数返回类型

    (2)第二种是函数重写(override):在派生类中重新定义的函数,它的函数名,参数列表,返回值类型,所有都必须和基类中被重写的函数相同。在运行期间,决定函数调用。(也被叫做动态多态)

    1. 不同的作用域,分别位于子类和基类
    2. 函数名、参数列表、返回类型相同
    3. 基类的函数必须有virtual关键字

    隐藏:派生类屏蔽了和它同名的基类函数,只要同名,不管参数列表,基类都会被隐藏。

    1. 不在同一个作用域(分别位于派生类与基类)
    2. 函数名字相同
    3. 返回类型可以不同
    4. 参数不同,此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)而不是被重写
    5. 参数相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)

    (3)泛型编程。(这也是静态的多态)

    在c++中主要是函数模板,类模板

    不是真正的函数,只是一个用来生成正在函数的一个模板,只有当通过模板使用某个具体的函数时,才会真正生成这个函数。

    函数模板不允许自动类型转换,不可以设置默认的模板实参。

    静态/动态多态的优缺点

    • 静态:
      优点:编译期完成的,效率高。带来了泛型设计的概念,像我们经常使用的STL库,就是基于泛型来设计的。
      缺点:通过模板来实现静态多态,模板的调试困难,代码膨胀、编译慢的问题
    • 动态:
      优点:直观,面向对象设计;接口和实现分离,可以复用。
      缺点:运行的时候绑定,开销大。类继承下,对接口修改会影响整个类层次。
  • 相关阅读:
    ODBC接口规范
    JDBC与ODBC
    java中newInstance()和new()
    JDBC详解
    用JDBC连接 数据库 进行简单的增删改查
    JDBC接口规范
    JDBC中常用的接口
    java中的getStackTrace和printStackTrace的区别
    linux中的strings命令
    JAVA的容器---List,Map,Set (转)
  • 原文地址:https://www.cnblogs.com/EvansPudding/p/12606789.html
Copyright © 2011-2022 走看看