zoukankan      html  css  js  c++  java
  • 多态基本概念

    1、为什么要引入多态机制?

    多态机制可提高程序的可扩充性(即程序需要修改或增加功能的时候,需要改动和增加的代码较少)。支持类、对象、继承,但是不支持多态的语言应该称为基于对象的语言(例如:VB)。而支持多态的语言才能称为面向对象的语言。

    2、虚函数

    (1) 什么叫虚函数?
    在类的定义中,前面有 virtual 关键字的成员函数就是虚函数。

    class base {
    	virtual int get() ;
    };
    
    int base::get()
    { }
    

    注意:virtual 关键字只用在类定义里的函数声明中,写函数体时不用。
    (2)虚函数与普通函数的区别
    普通函数与虚函数的区别在于:虚函数能够参与多态,但是普通函数不能。

    3、什么是多态?

    多态有两种表现形式:
    (1)派生类的指针可以赋给基类指针。(公有继承的赋值兼容规则)
    通过基类指针调用基类和派生类中的同名虚函数时:

    • 若该指针指向一个基类的对象,那么被调用是基类的虚函数;
    • 若该指针指向一个派生类的对象,那么被调用的是派生类的虚函数。

    这种机制就叫做“多态”
    举栗子:

    class CBase {
    public:
    	virtual void SomeVirtualFunction() { }
    };
    
    class CDerived:public CBase {
    public :
    	virtual void SomeVirtualFunction() { }
    };
    
    int main() {
    	CDerived ODerived;
    	CBase * p = & ODerived;
    	p -> SomeVirtualFunction(); //调用哪个虚函数取决于p指向哪种类型的对象
    	return 0;
    }
    

    (2)派生类的对象可以赋给基类引用。(公有继承的赋值兼容规则)
    通过基类引用调用基类和派生类中的同名虚函数时:

    • 若该引用引用的是一个基类的对象,那么被调 用是基类的虚函数;
    • 若该引用引用的是一个派生类的对象,那么被 调用的是派生类的虚函数。

    这种机制也叫做“多态”。
    举栗子:

    class CBase {
    public:
    	virtual void SomeVirtualFunction() { }
    };
    
    class CDerived:public CBase {
    public :
    	virtual void SomeVirtualFunction() { }
    };
    
    int main() {
    	CDerived ODerived;
    	CBase & r = ODerived;
    	r.SomeVirtualFunction(); //调用哪个虚函数取决于r引用哪种类型的对象
    	return 0;
    }
    
  • 相关阅读:
    [转]Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简述及技术选型介绍
    推荐一个windows系统的下载和安装的网址:win7之家
    [转]vue调试工具vue-devtools安装及使用(亲测有效,望采纳)
    [转]Error: Node Sass does not yet support your current environment: Windows 64-bit
    [转]升级/重装win10系统--提示无法验证密钥的解决办法
    Sólo le pido a Dios
    Composer 语法中的^符号意思
    服务器上传的目录索引一定要关闭
    [SAP] CloudWatch
    [SAA] 32. Data Engineering
  • 原文地址:https://www.cnblogs.com/lasnitch/p/12764248.html
Copyright © 2011-2022 走看看