Qt C++ visitor模式
来源:互联网 发布:淘宝全屏海报轮播滚动 编辑:程序博客网 时间:2024/04/29 07:43
element.h
#pragma once
#include <QObject>
#include "visitor.h"
class CEmployeePrivate;
class CEmployee : public QObject
{
Q_OBJECT
Q_CLASSINFO("Author","wdj")
Q_ENUMS(ESex)
Q_ENUMS(EGalatyType)
Q_PROPERTY(QString name READ getName WRITE setName)
Q_PROPERTY(ESex sex READ getSex WRITE setSex)
Q_PROPERTY(EGalatyType salary READ getSalary WRITE setSalary)
public:
CEmployee();
~CEmployee();
enum ESex
{
eMan = 0,
eWoman,
};
enum EGalatyType
{
eHigh = 0,
eMid,
eLow,
};
QString getName();
void setName(const QString &name);
ESex getSex();
void setSex(ESex sex);
EGalatyType getSalary();
void setSalary(EGalatyType galary);
virtual QString acceptSalary(CVisitor *visitor) = 0;
private:
CEmployeePrivate *d_ptr;
Q_DECLARE_PRIVATE(CEmployee)
};
class CManagerElement : public CEmployee
{
public:
CManagerElement(){};
QString acceptSalary(CVisitor *visitor)
{
qDebug() << "this is a manager";
return visitor->visitSalary(this);
}
};
class CCommandElement : public CEmployee
{
public:
CCommandElement(){};
QString acceptSalary(CVisitor *visitor)
{
qDebug() << "this is a commader";
return visitor->visitSalary(this);
}
};
element.cpp
#include "element.h"
class CEmployeePrivate
{
Q_DECLARE_PUBLIC(CEmployee)
CEmployee *q_ptr;
public:
CEmployeePrivate(){};
QString m_name;
CEmployee::ESex m_sex;
CEmployee::EGalatyType m_salary;
};
CEmployee::CEmployee()
{
d_ptr = new CEmployeePrivate();
d_ptr->q_ptr = this;
}
CEmployee::~CEmployee()
{
delete d_ptr;
}
QString CEmployee::getName()
{
return d_ptr->m_name;
}
void CEmployee::setName(const QString &name)
{
d_ptr->m_name = name;
}
CEmployee::ESex CEmployee::getSex()
{
return d_ptr->m_sex;
}
void CEmployee::setSex(ESex sex)
{
d_ptr->m_sex = sex;
}
CEmployee::EGalatyType CEmployee::getSalary()
{
return d_ptr->m_salary;
}
void CEmployee::setSalary(EGalatyType galary)
{
d_ptr->m_salary = galary;
}
#include "moc_element.cpp"
visitor.h
#pragma once
#include <QDebug>
#include <QVariant>
class CEmployee;
class CVisitor
{
public:
~CVisitor(){}
virtual QString visitSalary(CEmployee *elm) = 0;
protected:
CVisitor(){}
};
class CManagerVisitor : public CVisitor
{
public:
CManagerVisitor(){};
~CManagerVisitor(){};
QString visitSalary(CEmployee *elm);
};
class CCommanderVisitor : public CVisitor
{
public:
CCommanderVisitor(){};
~CCommanderVisitor(){};
QString visitSalary(CEmployee *elm);
};
visitor.cpp
#include "visitor.h"
#include "element.h"
QString CManagerVisitor::visitSalary(CEmployee *elm)
{
if (elm->property("sex").toInt() == CEmployee::eMan)
{
return "6000";
}
return "4800";
}
QString CCommanderVisitor::visitSalary(CEmployee *elm)
{
if (elm->property("sex").toInt() == CEmployee::eMan)
{
return "12000";
}
return "8500";
}
main,cpp
#include <QApplication>
#include "element.h"
int main(int argc,char **argv)
{
QApplication app(argc,argv);
CEmployee *manager = new CManagerElement;
CEmployee *commder = new CCommandElement;
manager->setProperty("sex",CEmployee::eMan);
commder->setProperty("sex",CEmployee::eWoman);
CVisitor *mv = new CManagerVisitor;
CVisitor *cv = new CCommanderVisitor;
QString msalary = manager->acceptSalary(mv);
QString csalary = commder->acceptSalary(cv);
delete manager;
delete commder;
delete mv;
delete cv;
return app.exec();
}
- Qt C++ visitor模式
- Visitor----------模式
- Visitor模式
- visitor模式
- Visitor模式
- Visitor模式
- Visitor 模式
- Visitor模式
- visitor模式
- Visitor模式
- Visitor模式
- Visitor模式
- visitor模式
- Visitor模式
- Visitor模式
- Visitor模式
- Visitor模式
- Visitor模式
- oracle导入dmp数据文件
- LinkedIn创始人Reid Hoffman写给毕业生的3个通往成功的秘密
- JVM加载class文件的原理机制
- Oracle 视图(View)
- C#窗体中输入的数据提取
- Qt C++ visitor模式
- Android-Universal-Image-Loader应用详解
- java学习心得
- DSS RTSPSession::Run State Transfer (2)
- 史玉柱自述营销心得:降价就是自杀
- [5月23日的脚本] 列出Windows 8中的激活状态 (VBScript)
- 0044算法笔记——【随机化算法】舍伍德(Sherwood)算法和线性时间选择问题
- SQL中CONVERT()转化函数的用法 字符串转日期
- Django实现RESTful web service