《C语言实例教程(PDF格式)》第130章


%y 不带年代前缀的年数,值在00到99之间。
%Y 带年代前缀的年数。
%z 简写的时区名称。
%Z 不简写的时区名称。
%% 百分号标志。
这个程序的代码如下:
CTime m_time=CTime::GetCurrentTime();
CString s1=m_time。Format(〃%A;%B;%d;%Y〃);
CString s2=m_time。Format(〃%U〃);
…………………………………………………………Page 626……………………………………………………………
CString m_str=〃当前时间是:〃+s1+〃n〃+〃本周是今年的第〃+s2+〃周〃;
MessageBox(m_str);
运行结果如图10。19所示。
图10。 19 显示当前时间
CTimeSpan类由下列成员函数:
CTimeSpan() 构造一个CTimeSpan类对象。
GetDays() 获得CTimeSpan类对象中包含的完整的天数。
GetHours() 获得当天的小时数,值在…23到23之间。
GetTotalHours()获得CTimeSpan类对象中包含的完整的小时数。
GetMinutes() 获得当前小时包含的分数,值在…59到59之间。
GetTotalMinutes() 获得CTimeSpan类对象中包含的完整的分数。
GetSeconds() 获得当前分钟包含的秒数,值在…59到59之间。
GetTotalSeconds() 获得CTimeSpan类对象中包含的完整的秒数。
Format() 将一个CTimeSpan对象转换成格式字符串。
operator = 赋予新的时间范围值。
operator ???? 增加或减小CTimsSpan对象。
operator ???????CTimeSpan对象增加或减去一个CTimeSpan对象。
operator ??,?? ,?,?,??,?? 比较两个CTimeSpan对象的大小。
下面的程序将构造一个CTimeSpan对象,并获取其中的完整天数、小 
时数、分数和秒数,代码如下:
…………………………………………………………Page 627……………………………………………………………
CTimeSpan m_timespan(3;4;5;6);
//构造一个CTimeSpan对象
LONG m_totalDays=m_timespan。GetDays();
//获得完整天数
LONG m_totalHours=m_timespan。GetTotalHours();
//获得完整小时数
LONG m_totalMinutes=m_timespan。GetTotalMinutes();
//获得完整分数
LONG m_totalSeconds=m_timespan。GetTotalSeconds();
//获得完整秒数
char s1'8';s2'8';s3'8';s4'8';
wsprintf(s1;〃%ld〃;m_totalDays);
wsprintf(s2;〃%ld〃;m_totalHours);
wsprintf(s3;〃%ld〃;m_totalMinutes);
wsprintf(s4;〃%ld〃;m_totalSeconds);
CString m_str=〃此时间范围包含:n完整天数 :〃+CString(s1)+
〃n完整小时数:〃+CString(s2)+〃n完整分数 :〃+CString(s3)+
〃n完整秒数 :〃+CString(s4);
MessageBox(m_str);
图10。 20 获取时间范围量包含的天、小时、分和秒数
这段代码主要让读者体会使用CTimeSpan处理时间范围量的便捷。运 
行结果如图10。20所示,消息框中显示了希望获得的信息。
…………………………………………………………Page 628……………………………………………………………
第十一章 异常处理和诊断
编写程序时出一些错误是难免的,在C++中称在软件或硬件中发生的 
不期望或不需要的事件为异常 (Exception)。MFC提供了两种异常处 
理机制:
l C++异常,在MFC 3。0和更高版本中可以使用
l MFC异常,在MFC 1。0和更高版本中可以使用
在程序出错误后需要调试程序,MFC提供了许多诊断服务,可以让用 
户轻松的调试程序,这些诊断服务大多以特定宏和全局函数形式出 
现。
本章将向读者介绍以下内容:
l 处理C++异常
l MFC异常
l 诊断服务
第一节 处理C++异常
C++使用try、catch、throw三个关键字来实现异常处理。使用C++的 
异常处理能够使你的程序从异常状态中恢复。这些异常由处于正常控 
制流之外的代码来处理。
l 注意:
l 新的32位的异常处理机制支持C和C++。但是,它并非为C++专门设 
计的。你应 当保证你的代码非常适合于C++的异常处理,并且C++ 
的异常处理是相当灵活的,它可以处理任何类型的异常。
异常处理机制允许程序对严重的和没有预料到的问题做出响应。一个 
异常块由下列三个部分组成:
l try块
标志你认为可能会出现异常的代码。
l catch块
…………………………………………………………Page 629……………………………………………………………
紧跟着try块,里面包含了处理异常的代码。
l throw块
抛出一个异常,激活catch块中的相应的异常处理代码。
异常处理的机制比较简单,首先你将有可能出现问题的代码放在try 
块中,然后在catch块中放进用来处理异常的代码。如果在try块中的 
代码抛出一个异常,try块迅速退出执行,程序将转入catch块中执行 
相应的异常处理代码。
第二节 MFC异常
在MFC中CException类是所有异常类的基类,它是一个抽象类,你不 
能使用它的对象,只能创建它的派生类的对象。它有两个公用方法: 
GetErrorMessage 和ReportError ,分别用于查找描述异常的 
信息和为用户显示一个错误信息的信息对话框。
CException类包含以下基类 (如图11。1所示),并提供了THROW、 
THROW_LAST、TRY、CATC、 AND_CATCH、 END_CATCH这些宏用来处理 
异常。
图11。 1 CException的基类
(1) CArchiveException
一个CArchiveException用来描述序列化异常状态。它包含了一个数 
据成员m_cause用来表现异常的原因。它可能为以下值:
…………………………………………………………Page 630……………………………………………………………
none :没有错误发生
generic:未指定的错误
readOnly:试图写入一个为载入而打开的文档
endOfFile:当读取一个文档时到达文档尾部
writeOnly:试图读取一个为存储而打开的文档
badIndex:非法文件格式
badClass:试图读一个对象到一个错误类型对象中
badSchema:试图读一个对象,它带有不同的类的版本
另外MFC还提供AfxThrowArchiveException 函数来抛出一个存档 
文件异常,形式如下:
void AfxThrowArchiveException( int cause; LPCTSTR lpszArchiveName );
(2) CDaoException
一个CDaoException类对象用来表示基于数据访问对象 (DAO;data
access objects)的MFC数据库类的异常。这个异常类包含三个决定 
异常原因的成员变量,这三个成员变量是:
m_scode:描述与异常相关的SCODE代码
m_pErrorInfo:包含用于所有MFC的DAO类的所有异常的扩展错误代码
m_nAfxDaoError:包含DAO错误对象的指向CDaoErrorInfo结构的指针
这个类有下列两个操作:
GetErrorCount 获取在数据库引擎异常集合中的异常数 目
GetErrorInfo 获取在异常集合中相似对象的错误信息
MFC中的AfxThrowDaoException()函数抛出一个CDaoException类型的 
异常,使用如下形式:
void AFXAPI AfxThrowDaoException( int nAfxDaoError = NO_AFX_DAO_ERROR; SCODE
scode = S_OK );
小说推荐
返回首页返回目录