【c++】虚函数讲解
2019-04-12 11:25
225 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hello_ape/article/details/89227662
- 虚函数的作用
当涉及继承关系的时候,对于某些函数,基类和派生类希望有各自的版本,那么基类可以将函数声明为虚函数。
对于基类而言,其中的成员函数可以分为两种,一种希望派生类直接继承;第二种希望派生类有自己的版本,此时应当声明为虚函数。
对于派生类而言,并不是一定需要重写从基类继承来的虚函数。如果重写虚函数,那么派生类将有自己的版本,如果不重写,那么将使用基类的版本。
- override关键字
如果派生类希望使用自己的版本,C++11提供了override关键字,可以显式地注明。override关键字放在const、或者参数列表之后。推荐使用关键字,否则当派生类中重写基类的虚函数,但是如果参数列表不一致,或者返回值不一致,那么此时并没有发生覆盖行为,只是派生类定义了一个新的函数。
- final关键字
如果不希望派生类覆盖基类中的虚函数,可以使用final关键字。使用final关键字后,任何覆盖的尝试都将编译报错。
[code]#include <iostream> class base{ public: virtual void print() const { std::cout << "base print" << std::endl; } }; class A :public base{ public: int getval() const{ return val; } virtual void print() const { std::cout << "A print: "<<getval() << std::endl; } private: int val = 2; }; class B :public base{ public: int getval() const{ return val; } private: int val = 2; }; class C :public base{ public: int getval() const{ return val; } virtual void print() const override final { std::cout << "C print: " << getval() << std::endl; } private: int val = 3; }; class D :public C{ public: //发生重写行为时,将编译报错 virtual void print()const { std::cout << "D print: " << getval() << std::endl; } }; int main(int argc, char **argv) { A a; B b; C c; a.print();//输出 A print: 2 b.print();//输出 base print c.print();//输出 C print: 3 system("pause"); return 0; }
相关文章推荐
- C++中随机函数rand()和srand()的用法(函数讲解)
- 小白教你学习C++(4)虚函数的讲解
- 《C/C++函数与算法速查手册》重印了,这本书从C语言函数C++函数讲解,然后是算法等讲解
- 转自【北漂民工】C++文件读取操作的全部函数讲解fstream(ofstream/ifstream)
- C++ 回调函数 --函数的接口 讲解
- C++中虚函数、虚表、虚指针实例讲解
- C++ 回调函数 --函数的接口 讲解
- C++中的函数修饰符深入讲解
- 实例讲解在C++的函数中变量参数及默认参数的使用
- [原创]详细讲解C/C++中的函数中的传值与传址
- C++中虚函数的用法详细讲解
- c++的map函数讲解
- C++STL函数大全 函数讲解摘自文库
- C++之内联函数讲解
- C++STL函数大全 函数讲解摘自文库
- C++调用C库函数详细讲解
- 简单讲解C++的内部和外部函数以及宏的定义
- C++ 之 第二课 C++类、函数的讲解
- C++静态成员函数基本概念讲解
- 深入讲解C++数据类型转换的相关函数的知识