qt 上使用虚函数的经验
来源:互联网 发布:绝缘电阻数据怎么填 编辑:程序博客网 时间:2024/05/29 16:05
首先为什么要用虚函数
作为面向对象的语言而不是基于对象,要把程序做到工程化,好用,继承起来快捷,让其他程序员能看懂甚至他们都不用懂就会改你的程序
基于这么多的原因必须使用c++的精髓:继承,多态
而这里面虚函数就显得非常重要
虚函数有什么作用
虚函数作为一个函数,它可以像重载一样有多次定义,而在调用的时候根据当前指针的情况指向不同类,使用不同的功能,只用同一个接口
在qt上怎么使用
首先既然写虚函数,就是为了继承和派生的时候使用方便,所以首先还是要先写好父类。
在父类里面也分自己使用的函数和子类将要继承的函数,如果在子类继承的函数里有哪个函数是要给子类继承而且要作为虚函数使用,
那么在.h文件声明前要加上virtual,如:virtual void turnOn();
接着在.cpp文件里面定义如:
void BasicEquip::turnOn()
{
QByteArray d;
d.append(0x13);
zigbee->sendPackage(equipAddr,1,1,d);//because send to equip dont need location and type,so enter 1 and 1
}
接下来就是要在子类中继承:
class Equip_Alarm: virtual public BasicEquip
{
public:
Equip_Alarm(qint16 address);
};
这样继承的话如果一旦调用turnon()函数的话就是调用父类的函数,如:
BasicEquip *p;
p = new Equip_Alarm(address);
p->turnOn();
这时候就会直接调用父类的turnon();
而如果想调用子类自己的turnon()函数的话,在继承时只用加上
virtual void turnOn(); //virtual可加可不加
接着在.cpp文件定义你自己的turnon()函数,调用时便会调用子类的turnon()函数。
这样就成功的实现了虚函数的使用!!
但是如果工程复杂一点的话还会有很多情况:
1.如果有多个子类继承同一个父类,而且每个子类调用的函数都不一样,那么父类也没有定义函数的必要,只要声明即可
这时候就会用到纯虚函数,如virtual void turnOn() = 0;
2.如果有多个子类继承同一个父类,同时子类间又各自有各自的虚函数是其他子类不需要的。
比如:
class A
{
public:
A(int i );
virtual void test();
virtual void test2(){}
virtual void test3(){}
};
class B : virtual public A
{
public:
B(int i );
void test2();
}
class C:public B
{
public:
C(int i );
void test3();
};
这样的话即使test2(),test3()不打算在父类里面定义,也要在声明后面加上{},因为一旦声明了一个函数为虚函数后,他必须在父类或所有子类都有它的定义,
所以最好的办法就是在父类就定义了,定义成一个空的函数。
- qt 上使用虚函数的经验
- 【经验分享】QT的安装使用,与VC的集成
- 使用VS2010开发Qt程序的一点经验
- 使用VS2010开发Qt程序的一点经验
- Qt使用上一次打开的路径
- 网络上一强人写的FC6的使用经验
- 转:SDL在windows mobile上的使用经验
- fedor 上 使用yum rpm的一些经验
- 关于NandFlash在实际产品使用上的一些经验
- Swapper 2 在ZTE960S2上的使用经验
- 关于LineChart使用上的一些体会与经验分享
- window上使用GIT的个人经验(入门级)
- window上使用GIT的个人经验(入门级)
- window上使用GIT的个人经验(入门级)
- 关于OJ上STL库使用的一点经验记录
- QT上使用Sqlite3
- QT上使用OpenCV
- HashMap使用经验(上)
- 索引详解-2
- SWOT分析方法
- cocos2dx-使用16-bit纹理显示图片
- 深入理解java虚拟机读书笔记之-----平台无关
- Android 实现图片圆角
- qt 上使用虚函数的经验
- mysql索引
- 深入理解java虚拟机读书笔记之-----安全(1)
- 解决html代码中插入的图片在浏览器中不显示的办法
- Java设计模式十六:组合模式(Composite Pattern)
- hdu 3746 Cyclic Nacklace(KMP 最短循环节)
- android游戏载入的activity跳转到游戏主菜单的activity
- 搭建Git服务器-gitolite
- 深入理解java虚拟机读书笔记之-----安全(2)