`
pleasetojava
  • 浏览: 703429 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

错误关联器 C++实现

 
阅读更多

-----------------------------------------------ErrorCorrelator.h----------------------------------------------#include<ostream>
#include<string>
#include<queue>
#include<stdexcept>

//error 类声明
class Error
{
public:
Error(int priority,std::string errMsg):
mPriority(priority),mError(errMsg){}


int getPriority() const {return mPriority;}


std::string getErrorString() const {return mError;}

friend bool operator<(const Error& lhs,const Error &rhs);


friend std::ostream& operator<<(std::ostream &str,const Error &err);
protected:
int mPriority;
std::string mError;
};

//error类容器,返回最高优先级的错误
class ErrorCorrelator
{
public:
ErrorCorrelator(){};

////向优先队列中添加元素
void addError(const Error& error);


//取得最优先元素
Error getError() throw (std::out_of_range);

protected:
std::priority_queue<Error> mErrors;

private:
//prevent assignment and pass-by-refernence
ErrorCorrelator(const ErrorCorrelator &src);

ErrorCorrelator & operator=(const ErrorCorrelator &rhs);

};

//比较符<重载
bool operator<(const Error& lhs,const Error &rhs)
{
return lhs.mPriority<rhs.mPriority;
}

//输出符<<重载
std::ostream& operator<<(std::ostream &str,const Error &err)
{
str << err.mError <<"(priority "<<err.mPriority<<")"<<std::endl;
return (str);
}

//向优先队列中添加元素
void ErrorCorrelator::addError(const Error &error)
{
mErrors.push(error);
}


//取得最优先元素
Error ErrorCorrelator::getError() throw(std::out_of_range)
{
//判断优先队列是否为空
if(mErrors.empty())
{
throw(std::out_of_range("No elements!"));
}
//获取对头元素
Error top = mErrors.top();
// 弹出队头元素
mErrors.pop();

return top;
}

---------------------------------------------------主函数-------------------------------------------------------

#include "stdafx.h"
#include<iostream>
#include "ErrorCorrelator.h"
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
ErrorCorrelator ec;
ec.addError(Error(3,"Unable to read file!"));
ec.addError(Error(1,"Incorrect entry from user!"));
ec.addError(Error(10,"Unable to allocate memory!"));

while(1)
{
try
{
Error e = ec.getError();
cout << e << endl;
}
catch(out_of_range&)
{
cout<<"Finished processing errors!"<<endl;
break;
}
}

system("pause");
return 0;
}

-----------------------------------------------------程序测试--------------------------------------------------Unable to allocate memory!(priority 10)

Unable to read file!(priority 3)

Incorrect entry from user!(priority 1)

Finished processing errors!
请按任意键继续. . .

分享到:
评论

相关推荐

    C++ Primer第四版【中文高清扫描版】.pdf

    本版对前一版进行了彻底的修订,内容经过了重新组织,更加入了C++ 先驱Barbara E. Moo在C++教学方面的真知灼见。既显著改善了可读性,又充分体现了C++语言的最新进展和当前的业界最佳实践。书中不但新增大量教学辅助...

    C++数据抽象和问题求解(第6版).[美]Frank M. Carrano(带详细书签).pdf

    C6.1.3 实现迭代器 483 C6.2 迭代器的高级功能 485 第17章 堆 489 17.1 ADT堆 490 17.2 堆的基于数组的实现 493 17.2.1 基于数组的堆操作的算法 494 17.2.2 实现 498 17.3 ADT优先队列的堆实现 502 17.4 堆...

    《C++编程艺术》教程+代码

    2.3.5 实现垃圾回收器 10 2.3.6 是否使用多线程 10 2.3.7 何时回收垃圾 10 2.3.8 关于auto_ptr 11 2.4 一个简单的C++垃圾回收器 11 2.5 详细讨论GCPtr 23 2.5.1 GCPtr的数据成员 23 2.5.2 函数findPtrInfo() 24 ...

    Borland C++ Builder 6.0 Build 10.166 汉化 补丁 终结版 .rar

    在 Borland C++Builder 6 汉化补丁增强版 的基础上,进一步修正了 Borland 的图片及资源编辑器、SQL 监视器的一些小的翻译问题,力争翻译的更贴切。同时, 增加了对 Borland SQL 浏览器 、桌面数据库 、BDE 管理员 ...

    C++注册系统右键源码

    通过注册表操作,将自定义的命令添加到注册表中,并将其与特定的文件类型或文件夹关联起来。 菜单项命令处理:源码会定义相应的命令处理函数,用于执行用户选择的右键菜单项所代表的功能。例如,可以实现文件注册的...

    C++实现图的邻接矩阵表示

    本文实例为大家分享了C++实现图的邻接矩阵表示代码,供大家参考,具体内容如下 1.遇到的问题:教材中写着子类Graphmtx(我用GrapMatrix)继承基类Graph 但是我在子类GraphMatrix中使用父类Graph的保护成员属性:...

    c++ 设计模式 简单工厂模式

    简单工厂模式: ...如果要新增一个开平方根的算法,则只需要新增一个OperationSqrt类,然后在OperationFactory里关联就可以。 如果需要修改除法里屏蔽除零的错误,则只需要去修改OperationDiv类就可以。

    图书管理系统-C/C++-课设-数据结构

    基于C++实现简易图书管理系统 设计的基本要求 基本完成对图书系统的设计,包含基本的功能,无界面设计。 要有明显的分类,对不同的进入者有不同的功能,功能要齐全。 要有基本维护功能,能完成对书籍,登陆者的...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    《visual c++ 2010入门经典(第5版)》针对visual c++ 2010版本进行了全面更新,介绍了最新的开发环境和如何使用visual c++构建现实世界中的应用程序。拥有本书,您就迈向了通往使用两种c++版本编写应用程序的成功之路...

    Visual C++ 2005入门经典.part08.rar (整理并添加所有书签)

    19.7.5 实现过滤器参数 19.7.6 链接订单对话框和客户对话框 19.7.7 练习使用数据库查看器 19.8 小结 19.9 练习题 第20章 更新数据源 20.1 更新操作 20.1.1 CRecordset更新操作 20.1.2 事务 20.2 简单的更新示例 20.3...

    C++编程思想习题

    14.4C++如何实现晚捆绑 14.4.1存放类型信息 14.4.2对虚函数作图 14.4.3撩开面纱 14.4.4安装vpointer 14.4.5对象是不同的 14.5为什么需要虚函数 14.6抽象基类和纯虚函数 14.7继承和VTABLE 14.8虚函数和构造函数 ...

    Visual C++ 2005入门经典.part04.rar (整理并添加所有书签)

    19.7.5 实现过滤器参数 19.7.6 链接订单对话框和客户对话框 19.7.7 练习使用数据库查看器 19.8 小结 19.9 练习题 第20章 更新数据源 20.1 更新操作 20.1.1 CRecordset更新操作 20.1.2 事务 20.2 简单的更新示例 20.3...

    摩托罗拉C++面试题

    13.C也可以通过精心封装某些函数功能实现重用,那C++的类有什么优点吗,难道仅仅是为实现重用。 并不仅仅是这样的。 OOD,OOP从根本上改变了程序设计模式和设计思想,具备重大和深远的意义。 类的三大最基本的特征:...

    C++标准程序库STL的架构

    3.2.5 抛出标准异常和实现自己的异常 8 3.3 配置器 8 4 通用工具 9 4.1 简介 9 4.1.1 类别 9 4.1.2 头文件 9 4.2 Pairs 9 4.2.1 简介 9 4.2.2 示例 9 4.3 auto_ptr 10 4.3.1 作用 10 4.3.2 引入原因 10 4.3.3 声明 ...

    BooksManageSystem:基于C++实现简易图书管理系统

    图书管理系统基于C++实现简易图书管理系统该项目是在学习完C++语言后,独立完成设计开发的简易图书管理系统设计的基本要求基本完成对图书系统的设计,包含基本的功能,无界面设计。要有明显的分类,对不同的进入者有...

    C/C++-数据结构-文件存储-图书管理系统-大学生课设

    3.书写主函数,调用类的相应函数,对各功能进行关联,完成对菜单函数的书写,能够实现界面的跳转,进行相应功能的测试。 4.调试各功能函数,查找错误点,进行修改。 基本功能 管理员(未登录) 登录 修改个人信息...

    Visual C++ 2005入门经典.part05.rar (整理并添加所有书签)

    19.7.5 实现过滤器参数 19.7.6 链接订单对话框和客户对话框 19.7.7 练习使用数据库查看器 19.8 小结 19.9 练习题 第20章 更新数据源 20.1 更新操作 20.1.1 CRecordset更新操作 20.1.2 事务 20.2 简单的更新示例 20.3...

    C++Builder (BCB)编程规范

    1 单元 每个单元只包含一个类的声明。类中不永许写类的实现,类成员函数不超过20个,需要被外界调用的成员... 还有一次不知那各BCB老大自报家丑 说自己吸了5包烟抓改BUG直到凌晨时分,方发现了它,原来是书写错误。

Global site tag (gtag.js) - Google Analytics