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;
    }
    
  • 相关阅读:
    SilkTest Q&A 5
    SilkTest Q&A 6
    产生n不同随机数的算法
    根据日期计算星期小算法
    Linux $( )与${ }的区别
    UVA 10313(完全背包变形)
    HDU 4277 USACO ORZ
    Android Studio上手,基于VideoView的本地文件及流媒体播放器
    Mina框架项目运用
    【iOS】怎样推断文本文件的字符编码格式
  • 原文地址:https://www.cnblogs.com/lasnitch/p/12764248.html
Copyright © 2011-2022 走看看