博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
虚函数的用法
阅读量:5748 次
发布时间:2019-06-18

本文共 1574 字,大约阅读时间需要 5 分钟。

由于在学习QT的时候,涉及到了虚函数的,在网上查看了别人的博客,在这里进行总结:

  先看 下虚函数的定义:

  在某中声明为 virtual 并在一个或多个中被重新定 义的,virtual 函数返回类型 函数名(参数表) {

;},实现,通过指向的或引用,访问派生类中同名覆盖

 

  看一个简单的例子来进行说明:

 

1 #include "stdio.h" 2 class Parent 3 { 4     public: 5      6     char data[20]; 7     void Function1(); 8     virtual void Function2();   //声明Function2为虚函数 9 }parent;10 11 void Parent::Function1()12 {13     printf("this is parent,function1\n");14 }15 16 void Parent::Function2()17 {18     printf("this is parent,function2\n");19 }20 21 class Child::public Parent22 23 {24    void Function1();25 26    void Function2();27 28 }child;29 30 void Child::Function1()31 {32    printf("this is child,function1");33 }34 35 36 void Child::Function2()37 { 38    printf("this is child,function2");39 }40 41 42 int main()43 {44    Parent *p;  //定义一个基类指针45    if(_getch()=='c')     //如果输入一个小写字母c46 47    p=&child;    //指向继承类对象48 49    else p=&parent;      //否则指向基类对象50 51    p->Function1();52 53    p->Function2(); 54 55    return 0;56 }
View Code

 当编译程序后,输入小写字母c后,打印的结果是:

   this is parent,function1

   this is child,function2

 

解释:在主函数中,定义了一个parent类的指针,该指针的赋值是child类,所以指针指向child对象。

  虽然指针指向了child类的对象,但是编译器无法知道指针到底是指向那个对象,直到程序运行的时候,函数才能够根据用户的输入来能判断出来指针的正确指向。

在本程序运行的时候,并未涉及到用户的输入指定,所以指针默认的去调用主类parent的成员函数。

  this is parent,function1

 

  在主类的parent的成员函数中,声明Function2()是虚函数,虚函数可以在运行时,自动的去判断指针的正确指向,而不需要人为的输入进行指定。所以运行的结果正确  

地调用子类child的成员函数。

 

 

  总结:

  若对主类的成员函数设置为虚函数,必须显示的写出关键词virtual,子类的虚函数必须和主类的虚函数同名,但是关键词virtual可以省略。

 

  虚函数一般是在涉及到类的继承和多态性的时候应用,常见的地方在图像界面开发QT或者MFC。图像化界面的控件好多都是继承的关系。

 

转载于:https://www.cnblogs.com/ccnp/p/3899719.html

你可能感兴趣的文章
Android开发历程_15(AppWidget的使用)
查看>>
阿花宝宝 Java 笔记 之 初识java
查看>>
7、设计模式-创建型模式-建造者模式
查看>>
我国古代的勾股定理
查看>>
Linux下的C编程实战
查看>>
[32期] html中部分代码与英语单词关系
查看>>
PHP安装环境,服务器不支持curl_exec的解决办法
查看>>
jQuery|元素遍历
查看>>
用 ThreadLocal 管理用户session
查看>>
setprecision后是要四舍五入吗?
查看>>
shiro初步 shiro授权
查看>>
上云就是这么简单——阿里云10分钟快速入门
查看>>
MFC多线程的创建,包括工作线程和用户界面线程
查看>>
我的友情链接
查看>>
FreeNAS8 ISCSI target & initiator for linux/windows
查看>>
cvs文件提交冲突解决方案
查看>>
PostgreSQL数据库集群初始化
查看>>
++重载
查看>>
Rainbond 5.0.4版本发布-做最好用的云应用操作系统
查看>>
nodejs 完成mqtt服务端
查看>>