zoukankan      html  css  js  c++  java
  • C++中多态的概念和意义

    C++多态性:

    1. 定义

    “一个接口,多种方法”,程序在运行时才决定调用的函数。

    2. 实现:

    C++多态性主要是通过虚函数实现的,虚函数允许子类重写override(注意和overload的区别,overload是重载,是允许同名函数的表现,这些函数参数列表/类型不同)。

    *多态与非多态的实质区别就是函数地址是早绑定还是晚绑定。

    *如果函数的调用,在编译器编译期间就可以确定函数的调用地址,并生产代码,是静态的,就是说地址是早绑定的。

    *而如果函数调用的地址不能在编译器期间确定,需要在运行时才确定,这就属于晚绑定。 

    3.目的:

    接口重用。封装可以使得代码模块化,继承可以扩展已存在的代码,他们的目的都是为了代码重用。而多态的目的则是为了接口重用。
    4.用法:

    声明基类的指针,利用该指针指向任意一个子类对象,调用相应的虚函数,可以根据指向的子类的不同而实现不同的方法。

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    class Parent
    {
    public:
        virtual void print()  // 这个函数可能被继承的子类重写,所以加上virtual 关键字来修饰它,称为虚函数,实现多态;
        {
            cout << "I'm Parent." << endl;
        }
    };
    
    class Child : public Parent
    {
    public:
        void print()  // 虽然没有写 virtual 关键字,但是由于继承的关系,它就是虚函数;一般工程中没必要在子类中写 virtual;
        {
            cout << "I'm Child." << endl;
        }
    };
    
    void how_to_print(Parent* p)
    {
        p->print();     // 希望展现多态行为;
    }
    
    int main()
    {
        Parent p;
        Child c;
    
        how_to_print(&p);    // 期望打印: I'm Parent.  实际打印:I'm Parent.
        how_to_print(&c);    // 期望打印: I'm Child.  实际打印:I'm Child.
    
        return 0;
    }

    多态意义:

    1,在程序运行过程中展现出动态的特性;

    1,编译时无法决定究竟调用哪一个版本的实现;

    2,函数重写必须多态实现,否则没有意义;

    1, C++ 后续语言(Java、C#)中,只要是重写,一定是虚函数,不需要显示声明 virtual 关键字;

    3,多态是面向对象组件化程序设计的基础特性;

    1,后续学习中多态特性会被变着花样玩儿,特别是设计模式中绝大多数模式都和多态相关;

  • 相关阅读:
    C#中的WebBrowser控件的使用
    触发器
    SQL Server存储机制
    mongodb客户端操作常用命令
    动态居中方法
    关于node不需要重启即可刷新页面
    测试一个段落里面是否含有数字
    表单验证
    关于echarts和jquery的结合使用问题
    js函数获取ev对象
  • 原文地址:https://www.cnblogs.com/sharecenter/p/14687917.html
Copyright © 2011-2022 走看看