平台:VC++ 2005 测试通过!
.vcproj
这是使用应用程序向导生成的 VC++ 项目的主项目文件。
它包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。
StdAfx.h, StdAfx.cpp
这些文件用于生成名为 twod.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。
这些都是使用应用程序向导生成的 VC++ 文件故不列出
我只列出程序主要部分!
/*
本例中,通过CClock类型的实现演示了C++中
操作符重载,类型的显式,隐式转换.
1. 为CClock类型提供++,+,-三个操作符重载函数,
使得++,+,-三个操作符可用于CClock类型的变量
的运算.
2. 对于客户代码中的t3 = t1 * 5; t3 = 6 * t3;要实现
此功能有两种途径:
2.1 通过CClock类型的类型转换函数
CClock(unsigned long i); 将unsigned long转换为CClock
operator unsigned long();将CClock转换为unsigned long
编译器将隐式地调用上述转换函数来支持
t3 = t1 * 5; t3 = 6 * t3;运算,具体过程是:
编译器隐式地调用operator unsigned long(),将
t1 * 5,6 * t3中的t1,t3自动转换为unsigned long
然后执行*法运算,然后,再调用CClock(unsigned long i)
将结果转换为CClock类型赋值给t3.
2.2 通过实现CClock类型的*法重载函数,来支持CClock
类型与unsigned long类型的*法运算.实现*法重载的
方式又有两种:
2.2.1 实现CClock类型的*法重载"成员函数"
CClock operator *(unsigned long m);此函数
只支持诸如:t1 * 5方式的运算,而5*t1运算是
不支持的.
2.2.2 实现CClock类型的*法重载"友元函数"
friend CClock operator *(unsigned long m, CClock c);
friend CClock operator *(CClock c, unsigned long m);
可支持t1 * 5运算,及5*t1运算.
*/
#include <iostream>
using namespace std;
class CClock {
//下面是三个全局friend函数
friend CClock operator+(int i, const CClock& c);
friend CClock operator+(const CClock& c, int i);
//friend CClock operator +(const CClock& c1, const CClock& c2);
*/
public:
/*constructor作为ADT conversions
此处的构造函数CClock可以
把unsigned long类型的变量
转换为CClock类型.在C++中凡是
只带一个参数的构造函数
都定义了一个隐式的转换*/
CClock(unsigned long i);
CClock(const CClock& rc);
void print() const; //formatted printout
void tick(); //add one second
/*重载++,-两个操作符,使它们可
用于CClock的变量*/
CClock operator++(){ tick(); return *this; }
CClock operator++(int){ tick(); return *this; }
CClock operator +(const CClock& c);
// CClock operator +(int i);
/*CClock operator -(const CClock&rc);
//CClock operator *(unsigned long m);
/*定义一个由CClock类型转换为unsigned long类型
变量的函数*/
operator unsigned long(){ return this->_totsecs;};
private:
unsigned long _totsecs; //时间总长
unsigned long _secs, _mins, _hours, _days;//秒,分,小时,天
};
CClock::CClock(unsigned long i) {
/*将时间转换为秒,分,小时,天表示*/
_totsecs = i;
_secs = _totsecs % 60;
_mins = (_totsecs / 60) % 60;
_hours = (_totsecs / 3600) % 24;
_days = _totsecs / 86400;
}
CClock::CClock(const CClock& rc){
_totsecs = rc._totsecs;
_secs = rc._secs; _mins = rc._mins;
_hours = rc._hours; _days = rc._days;
}
void CClock::tick(){
CClock temp(++_totsecs);
_secs = temp._secs; _mins = temp._mins;
_hours = temp._hours; _days = temp._days;
}
CClock CClock::operator +(const CClock& rc){
/*注意此函数返回值要求是CClock,
而return语句的内容是unsigned long
类型的this->_totsecs + rc._totsecs,隐式
类型转换发生*/
return (this->_totsecs + rc._totsecs);
}
/*
CClock CClock::operator -(const CClock& rc){
return (this->_totsecs - rc._totsecs);
}*/
/*CClock CClock::operator *(unsigned long m){
_totsecs = _totsecs * m;
return(this->_totsecs);
}
*/
/*CClock operator+(CClock c1, CClock c2){
//注意此处c1._totsecs + c2._totsecs是unsigned long
//但函数的返回值类型是CClock,编译器自动调用了类CClock的
//构造函数进行了ADT Conversion处理
return (c1._totsecs + c2._totsecs);
}
CClock CClock::operator-(CClock c){
return (_totsecs - c._totsecs);
}
CClock operator*(unsigned long m, CClock c)
{
return (m * c._totsecs);
}
CClock operator*(CClock c, unsigned long m)
{
return (c * m);
}
*/
/*CClock operator+(const CClock& c1, const CClock& c2){
return (c1._totsecs + c2._totsecs);
}
*/
CClock operator+(int i, const CClock& c){
return (i + c._totsecs);
}
/*CClock CClock::operator +(int i){
return ( i + _totsecs);
}*/
CClock operator+(const CClock& c, int i){
return (i + c._totsecs);
}
void CClock::print() const
{
cout << _days << " d :" << _hours << " h :"
<< _mins << " m :" << _secs << " s" << endl;
}
// ClockPro.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "CClock.h"
int _tmain(int argc, _TCHAR* argv[])
{
CClock t1(59), t2(172799); //172799 = 2 days - 1 sec
CClock t3(0);
CClock c1(900), c2(400);
cout << "initial times are" << endl;
t1.print(); t2.print();
int i;
cin >> i;
(t1 + t2).print();
(i + t1).print();
//(t1 + i).print();
cout << "after one second times are" << endl;
/*(++t1).print(); (++t2).print();
t3 = t1 + t2; t3.print();
t3 = t3 - t1; t3.print();
/*程序中并没有实现*操作符的重载
此处的*运算是如何实现的呢?*/
/*t3 = t1 * 5; t3.print();
t3 = 6 * t3; t3.print();
cout << "/n c1 and c2 /n";
c1.print(); c2.print();
*/
return 0;
}
分享到:
相关推荐
作者将C++语言作为算法描述语言,应用包含规范化的数据结构的标准模板库,集中讲述了数组、向量、表、关联树容器,以及集合、映射、堆、哈希表和图等数据结构及其算法,重点讨论了如何高效地存储大型数据集合,涵盖...
《C++语言程序设计——实训教程》是一本专为初学者和在校大学生设计的实践导向教程,旨在通过实例和练习帮助读者深入理解C++编程语言。C++是一种强大的、通用的编程语言,它继承了C语言的高效性,并引入了面向对象...
《C++课程设计——墨球游戏系统》是一个旨在让学生通过实践巩固C++语言知识和提升面向对象编程技能的项目。这个课程设计的目标是将理论学习与实际应用相结合,强化学生在数据类型、程序控制结构、数据结构等方面的...
【C++课程设计——学生管理系统】是一个典型的面向对象编程项目,旨在帮助学习者掌握C++语言在实际问题解决中的应用,特别是数据管理与系统设计。在这个项目中,学生管理系统是用C++实现的一个小型数据库系统,它...
作者将C++语言作为算法描述语言,应用包含规范化的数据结构的标准模板库,集中讲述了数组、向量、表、关联树容器,以及集合、映射、堆、哈希表和图等数据结构及其算法,重点讨论了如何高效地存储大型数据集合,涵盖...
C++课程设计——民航订票系统 要求:1、使用文件输入输出 2、包含航班信息,票务信息,旅客信息 3、进行模块代码设计
《C++语言描述——数据结构算法与应用》是一本深入探讨C++编程语言在数据结构和算法应用方面的专业书籍。本书旨在帮助读者理解和掌握如何利用C++高效地实现各种数据结构和算法,从而提升编程技能和解决问题的能力。...
【C++课程设计——超市收银系统】 C++是一种强大的面向对象编程语言,常用于开发高效、稳定且可移植的应用程序。在这个项目中,我们利用C++构建了一个基础的超市收银系统,它能处理商品信息、购物行为,并通过文件...
C++是一种广泛应用于系统软件、应用软件、游戏开发、嵌入式系统以及各种复杂软件工程的语言,由Bjarne Stroustrup在1983年为改进C语言而设计。本实训教程旨在深入浅出地教授C++编程,帮助学习者掌握C++的基础语法、...
C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程化编程,也支持面向对象编程的程序设计语言。它以其高效性和灵活性被广泛用于系统软件、应用软件、游戏开发以及大型企业级应用的后端服务等。 ...
数据结构C++语言描述——应用标准模板库
C++课程设计——课程设计宾馆客房管理系统(源代码+课设报告+详细注释) 实现功能如下: 1、输入用户名和密码 2、选择服务类型: ①订房;②入住;③退房;④查询; 本系统设置了80个房间,其中房间分四个等级,每...
图书管理系统使用C++编写的,适用人群学生,同学可以借鉴其内容,实现增删改查功能。如发现有错误,请在评论区指出,谢谢
《C/C++语言硬件程序设计——基于TMS320C5000系列DSP》是一本深入探讨如何使用C和C++编程语言进行数字信号处理(DSP)的专著,特别关注德州仪器(TI)的TMS320C5000系列 DSP 芯片。该书涵盖了从基础概念到高级应用的...
C++课程设计——个人财务管理,作为大学课程设计挺不错的,希望对大家有帮助。
C/C++课程设计——职工工作量统计系统(源代码): 功能包括: 1、职工基本信息输入; 2、输出信息; 3、工作量输入; 4、按工作量排序 打印出职工名次; 5、按职工工号查询; 6、按职工姓名查询; 7、按职工工号进行...
基于基于C++语言课程设计——通讯录管理系统、详细文档+全部资料+高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的...
小学期大作业,要求用C++语言,基于MFC写一个银行储蓄管理系统,开户,存款,取款,挂失,利息计算等等。可以提供给大家做个参考。登录账号:10001,密码:123
《C++程序设计教程——设计思想与实现习题代码答案》是一本面向初学者和有一定基础的程序员的教育性资源,旨在帮助读者深入理解和掌握C++编程语言。这本书结合了作者两年的教学实践经验,使得内容既理论严谨又贴近...