宏,函数模版方式实现继承方案
来源:互联网 发布:手机安装完整版linux 编辑:程序博客网 时间:2024/06/07 03:10
在QT中,对于所有定义了信号和槽的类,定义的开始处需要加入:Q_OBJECT宏!!!
/* tmake ignore Q_OBJECT */#define Q_OBJECT \public: \ Q_OBJECT_CHECK \ static const QMetaObject staticMetaObject; \ Q_OBJECT_GETSTATICMETAOBJECT \ virtual const QMetaObject *metaObject() const; \ virtual void *qt_metacast(const char *); \ QT_TR_FUNCTIONS \ virtual int qt_metacall(QMetaObject::Call, int, void **); \private: \ Q_DECL_HIDDEN static const QMetaObjectExtraData staticMetaObjectExtraData; \ Q_DECL_HIDDEN static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **);
由于众所周知的,继承将导致内存及性能消耗,这种方式是个不错的选择.下面,我们灵活的运用这个方案.
/* * File: main.cpp * Author: Vicky.H * Email: eclipser@163.com */#include <iostream>#include <typeinfo>#include <string.h>class A {public: virtual ~A() {}; virtual void sayHello() = 0;};class A1 : public A {public: void sayHello() { std::cout << "hello A1" << std::endl; } ~A1() { std::cout << "delete A1" << std::endl; }};class A2 : public A {public: void sayHello() { std::cout << "hello A2" << std::endl; } ~A2() { std::cout << "delete A2" << std::endl; }};#define B_OBJECT \public: \void sayHello() { \ std::cout << "hello " << this->name << "\t" \ << typeid(this).name() << std::endl; \} \private: \ char name[21]; template<typename T>void sayHello (T& o) { o.sayHello();}template<typename T>void sayHello (T* o) { o->sayHello();}template<typename T>void sayHello (const T* o) { o->sayHello();}class B1 { B_OBJECTpublic: B1(const char* name) { strcpy(this->name,name); }};class B2 { B_OBJECTpublic: B2(const char* name) { strcpy(this->name,name); }};/* * */int main(void) { A* a1 = new A1; a1->sayHello(); delete a1; A* a2 = new A2; a2->sayHello(); delete a2; std::cout << "---------------------------" << std::endl; B1 *b1 = new B1("Vicky"); b1->sayHello(); sayHello(b1); delete b1; B2 *b2 = new B2("Jack"); b2->sayHello(); sayHello(b2); delete b2; return 0;}
hello A1
delete A1
hello A2
delete A2
---------------------------
hello Vicky P2B1
hello Vicky P2B1
hello Jack P2B2
hello Jack P2B2
运行 SUCCESSFUL (总时间: 63ms)
- 宏,函数模版方式实现继承方案
- 多态的实现方式,继承与模版函数
- C语言宏实现模版函数
- C++函数模版实现
- 构造函数+原型混合方式实现js的继承
- javascript除call函数外实现继承的方式之一
- JavaScript面向对象-基于函数伪造的方式实现继承
- 分别基于虚函数和模版方式实现的多态
- javascript 继承实现方式
- javascript 继承实现方式
- Javascript继承实现方式
- javascript【继承实现方式 】
- 继承的实现方式
- [原创]PB编程的模版化处理[非继承方式]
- 函数模版、类模版、类模版和宏
- 数据结构模版----单链表实现方式总结
- C++构造函数&继承方式
- 解决多重继承中函数同名方案
- 【stl】copy读入文件|插入迭代器
- MFC自定义消息
- AIX 5300-06-01 + Oracle 9.2.0.6 = ORA-27061
- 如何在文件夹中建立网页的快捷方式
- XCode同一Project创建多个target
- 宏,函数模版方式实现继承方案
- UML关系(泛化,实现,依赖,关联(聚合,组合))
- Linux下软件的安装与卸载(命令行模式)
- LVS开源创始人之淘宝低碳平台构建
- Android Alarm manager 定时闹钟开发详解
- BusyBox init及其inittab文件分析(转)
- cocos2d-x学习笔记-CCAction(动作)
- web标准—可用性、可维护性、可访问性
- 关于使用google map程序中报java.lang.NoClassDefFoundError: android.net.NetworkConnectivityListener的问题