• 多态基本概念


    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;
    }
    
  • 相关阅读:
    Data type
    Backup &recovery备份和还原
    spring AOP Capability and Goals
    CDI services--Scope(生命周期)&&EL.(Sp El)
    CDI services--Event(事件)
    CDI services--interceptors(拦截器)
    CDI services--Decorators(装饰器)
    javaEE Design Patter(2)设计模式
    Http协议详解
    PRESCAN_DISCTANCE_ROBOT_INOUT_TOO_BIG
  • 原文地址:https://www.cnblogs.com/lasnitch/p/12764248.html
Copyright © 2020-2023  润新知