C++ 虚函数

虚函数 是在基类中使用关键字 virtual 声明的函数

派生类中重新定义基类中定义的虚函数时,会告诉编译器不要 静态链接 到该函数

在程序中任意点可以根据所调用的对象类型来选择调用的函数,这种操作被称为 动态链接 ,或 后期绑定

虚函数

虚函数就是使用关键字 virtual 声明的函数

virtual int area() {
   return width * height;
}

我们可以在基类中把一个函数定义为虚函数,然后在子类中重新实现

/**
 * file: main.cpp
 * author: 简单教程(www.twle.cn)
 *
 * Copyright © 2015-2065 www.twle.cn. All rights reserved.
 */
#include <iostream>

class Shape {
   protected:
      int width, height;
   public:
      Shape( int a=0, int b=0)
      {
         width = a;
         height = b;
      }
      // 虚函数
      virtual int area() {
         return width * height;
      }
};

class Rect: public Shape {

public:
   Rect( int a=0, int b=0): Shape(a, b) { }
   int area()
   {
      return width * height;
   }
};

int main() 
{
   Rect re(6,8);

   std::cout << "area of rect(6,8) is: ";
   std::cout << re.area() << std::endl;

   return 0;
}

使用 g++ main.cpp && ./a.out 命令编译和运行上面代码,输出结果如下

area of rect(6,8) is: 48

纯虚函数

有时候,我们想在基类中定义虚函数,又不能对虚函数给出有意义的实现,又想在派生类中重新定义该函数和实现以便更好地适用于对象,这时候就可以使用 纯虚函数

纯虚函数,就是 虚函数 后面跟 =0; 来实现的

= 0 告诉编译器,函数没有主体

virtual int area() = 0;

我们可以在基类中把一个函数定义为纯虚函数,然后在子类中实现逻辑

/**
 * file: main.cpp
 * author: 简单教程(www.twle.cn)
 *
 * Copyright © 2015-2065 www.twle.cn. All rights reserved.
 */

#include <iostream>

class Shape {
   protected:
      int width, height;
   public:
      Shape( int a=0, int b=0)
      {
         width = a;
         height = b;
      }
      // 纯虚函数
      virtual int area() = 0;
};

class Rect: public Shape {

public:
   Rect( int a=0, int b=0): Shape(a, b) { }
   int area()
   {
      return width * height;
   }
};

int main() 
{
   Rect re(6,8);

   std::cout << "area of rect(6,8) is: ";
   std::cout << re.area() << std::endl;

   return 0;
}

使用 g++ main.cpp && ./a.out 命令编译和运行上面代码,输出结果如下

area of rect(6,8) is: 48

C++ 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.