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;
    }
    
  • 相关阅读:
    IntelliJ IDEA快捷键
    Find Minimum in Rotated Sorted Array
    爬取淘宝交易记录的爬虫
    MR并行算法编程过程中遇到问题的思考
    Map.Entry用法示例
    给定一组数和一个目标值,返回和为目标值的集合(集合中的元素可重复)
    位运算:获取集合的子集
    Linux每次开机都要source profile的解决办法
    mysql数据导入导出
    linux下nginx编译安装(抄别人的,方便查看)
  • 原文地址:https://www.cnblogs.com/lasnitch/p/12764248.html
Copyright © 2011-2022 走看看