C++ - 多态与虚函数

虚函数

  • 在类的定义中,前面有 virtural 关键字的成员函数被称为虚函数。
class base{
      virtual int get();
};
int base::get(){}
  • virtual 关键字只用在类定义里的函数声明中,写函数体时候不用。
  • 构造函数和静态成员函数不能是虚函数。

多态的变现形式一

  • 派生类的指针可以赋给基类指针。
  • 通过基类指针调用基类和派生类中的同名虚函数时:
    • 若该指针指向一个基类的对象,那么被调用时基类的虚函数;
    • 若该指针指向一个派生类的对象,那么被调动的是派生类的虚函数。
      这种机制就叫做“多态”
class CBase{
    public:
        virtual void SomeVirtualFunction(){}
};
class CDerived:public CBase{
    public:
        virtual void SomeVirtualFunction(){}
};
int main() {
    CDerived ODerived;
    CBase * p = & ODerived;
//调用哪个虚函数取决于p 指向哪种类型的对象,编译的时候是不会知道的,直到运行的时候才会知道。
    p-> SomeVirtualFunction();
    return ();
}

多态的表现形式二

  • 派生类的对象可以赋给基类引用
  • 通过基类引用调用基类和派生类中的同名虚函数时:
    • 若该引用引用的是一个基类的对象,那么被调用时基类的虚函数;
    • 若该引用引用的是一个派生类的额对象,那么被调用的是派生类的虚函数。
      这种机制也叫做“多态”。
class CBase{
    public:
        virtual void SomeVirtualFunction(){}
};
class CDerived:public CBase{
    public:
        virtaul void SomeVirtualFunction(){}
};
int main(){
     CDerived ODerived;
     CBase & r = ODerived;
//调用哪个虚函数取决于 r 引用哪中类型的对象
    r. SomeVirtualFunction();
    return 0;
}

多态的作用

在面向对象的程序设计中使用多态,能够增强程序的可扩充性,即程序需要修改或增加功能的时候,需要改动和增加的代码比较少。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • C++虚函数 C++虚函数是多态性实现的重要方式,当某个虚函数通过指针或者引用调用时,编译器产生的代码直到运行时才...
    小白将阅读 1,759评论 4 19
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,545评论 1 51
  • 1. 结构体和共同体的区别。 定义: 结构体struct:把不同类型的数据组合成一个整体,自定义类型。共同体uni...
    breakfy阅读 2,176评论 0 22
  • 难得理想的圈子,遇见你,很幸运。谢谢!
    慕慕_阅读 210评论 0 0
  • 霏霏秋雨点击着 满腹惆怅的梧桐树叶 幽静的小路悠长 我在遥望,遥望秋雨尽处 依旧秋雨茫茫 没有登上高山 你就不知道...
    泰安左眼皮跳跳阅读 218评论 0 5