c++虚函数的使用方法
来源:互联网 发布:网络推广怎么做有效果 编辑:程序博客网 时间:2024/05/16 06:07
虚函数的使用方法:
(1)在基类用virtual声明成员函数为虚函数。这样就可以在派生类中重新定义此函数,为它赋予新的功能,并能方便被调用。
在类外定义虚函数时,不必在定义virtual
(2)在派生类中重新定义此函数,要求函数名,函数类型,函数参数个数和类型全部与基类的虚函数相同,并根据派
生类的需要重新定义函数体。
c++规定,当一个成员函数被声明为虚函数后,其派生类的同名函数都自动成为虚函数。因此在派生类重新声明该
虚函数时,可以加virtual,也可以不加,但习惯上一般在每层声明该函数时都加上virtual,使程序更加清晰。
如果再派生类中没有对基类的虚函数重新定义,则派生类简单的继承起基类的虚函数。(3)定义一个指向基类对象的指针变量,并使它指向同一类族中需要调用该函数的对象。
(4)通过该指针变量调用此虚函数,此时调用的就是指针变量指向的对象的同名函数。
下面来看一个例子:
#include<iostream>#include<string>using namespace std;class Student{public:Student(int , string, float);void display();protected:int num;string name;float score;};Student::Student(int n, string na, float s){num=n;name=na;score=s;}void Student::display(){cout<<"num:"<<num<<"\nname:"<<name<<"\nscore:"<<score<<endl;}class Graduate:public Student{public:Graduate(int , string , float, float);void display();private:float pay;};Graduate::Graduate(int n, string na, float s, float p):Student(n,na,s),pay(p){}void Graduate::display(){cout<<"num:"<<num<<"\nname:"<<name<<"\nscore:"<<score<<"\npay:"<<pay<<endl; } int main(){Student stud1(110,"SDL",99.8);Graduate grad1(120,"CCT",88.9, 250.5);Student *p;p=&stud1;cout<<"student:"<<endl;p->display();p=&grad1;cout<<"graduate:"<<endl;p->display();return 0;}输出的结果为:
此时没有将任何函数声明为虚函数,所以在Graduate类中diaplay()函数输出时没有pay的值,以为p指针是Student类的,本身Student不包括pay数据。
但如果我们想输出pay的值,只要把Student类中的display函数声明为虚函数即可,只要把它改为virtual void display()声明为虚函数就行,输出的结果为:
0 0
- c++memset函数的使用方法
- #C/C++笔记#C++虚函数的作用和使用方法
- 虚函数的使用方法
- **虚函数的使用方法**
- 【Visual C++】绘图函数BitBlt的使用方法
- 【Visual C++】绘图函数BitBlt的使用方法
- 【Visual C++】绘图函数BitBlt的使用方法
- C语言inline函数的使用方法
- C语言inline函数的使用方法
- C语言中fflush函数的使用方法
- C语言中fflush函数的使用方法
- 【转】C语言函数qsort的使用方法
- C中fread()函数的建议使用方法
- C语言中fflush函数的使用方法
- C 函数使用方法列表
- c++虚函数的使用方法
- C语言中自定义函数和函数的使用方法
- [c++] 函数指针和函数指针数组的使用方法
- nyoj540奇怪的排序
- 自动属性和初始化器
- 笔记:pixel-level domain transfer
- [乱搞 树状数组] BZOJ 4548 小奇的糖果 && BZOJ 3658 Jabberwocky
- 各类杂七杂八需要的数据
- c++虚函数的使用方法
- 深度学习读书笔记之RBM
- Android studio 错误提示,英文转中文
- define & defined
- 【线段树】线段树入门之入门
- Struts2核心时序图
- Spring AOP配置中的问题aop:aspectj-autoproxy
- Android 监听ScrollView滑动距离简单处理
- [CDQ分治 并查集 || 随机化权值Xor] BZOJ 3237 [Ahoi2013]连通图