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