实训C++语言设计——Rational有理数的运算实现
2008-02-17 22:53
369 查看
平台:VC++ 2005 测试通过!
.vcproj
这是使用应用程序向导生成的 VC++ 项目的主项目文件。
它包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。
StdAfx.h, StdAfx.cpp
这些文件用于生成名为 twod.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。
这些都是使用应用程序向导生成的 VC++ 文件故不列出
我只列出程序主要部分!
#include <iostream>
using namespace std;
class CRational{
public:
CRational(int n = 0) : _numerator(n), _denominator(1){}
CRational(int i, int j) : _numerator(i), _denominator(j){}
//下面的构造函数也充当type coversion,
//从double到CRational例如3.5转化为35/10
CRational(double r) :
_numerator(r * BIG), _denominator(BIG){}
//此处用 operator 类型() 定义一个type coversion:
//从CRational到double
//此类型转换函数为我们在程序中使用CRational
//的变量带来很多便利,在很多情况下编译器
//将自动调用此函数将CRational类型的变量
//通过此函数转换为double
operator double(){
return static_cast<double>(_numerator)/_denominator;
}
void print() const {
cout << _numerator << "/" << _denominator;
}
private:
long _numerator, _denominator;
enum {BIG = 100};
};
// RationalPro.cpp : 定义控制台应用程序的入口点。
/*本例给出了设计者为自己的类型设计
类型转换函数的实例.
(1). 可通过类型的构造函数提供类型转换,如本例中的
CRational(double r),可将double类型变量转换为CRational
(2). 定义类型转换函数,如本例中,operator double()
该函数可在程序中"显示地",或"隐式地"被调用,实现
从CRational到double的转换.
*/
#include "stdafx.h"
#include "CRational.h"
/*以下定义三个同名的greater函数,这就是函数重载*/
int greater(int i, int j) { return ( i > j ? i : j); }
double greater(double x, double y) { return ( x > y ? x : y); }
//为什么在此处没有overloading >,可以吗?
//注意此函数的执行过程
CRational greater(CRational w, CRational z) {
return ( w > z ? w : z);
}
int _tmain(int argc, _TCHAR* argv[])
{
int i = 10, j = 5; float x = 7.0; double y = 14.5;
CRational w(10), z(3.54);
//下面的y + z,不是基于操作符重载,而是基于
//类型转换来实现y + z的合法
cout << y + z;
cout << "/ngreater(" << i << ", " << j << ") = "
<< greater(i, j);
cout << "/ngreater(" << x << ", " << y << ") = "
<< greater(x, y);
cout << "/ngreater(" << i << ", " ; z.print(); cout << ") = "
//下面显示地调用从double到rational的conversion
<< greater(static_cast<CRational>(i), z);
//下面隐式地调用从rational到double的conversion
cout << "/ngreater("; w.print(); cout << ", "; z.print(); cout << ") = ";
greater(w, z).print();
return 0;
}
.vcproj
这是使用应用程序向导生成的 VC++ 项目的主项目文件。
它包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。
StdAfx.h, StdAfx.cpp
这些文件用于生成名为 twod.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。
这些都是使用应用程序向导生成的 VC++ 文件故不列出
我只列出程序主要部分!
#include <iostream>
using namespace std;
class CRational{
public:
CRational(int n = 0) : _numerator(n), _denominator(1){}
CRational(int i, int j) : _numerator(i), _denominator(j){}
//下面的构造函数也充当type coversion,
//从double到CRational例如3.5转化为35/10
CRational(double r) :
_numerator(r * BIG), _denominator(BIG){}
//此处用 operator 类型() 定义一个type coversion:
//从CRational到double
//此类型转换函数为我们在程序中使用CRational
//的变量带来很多便利,在很多情况下编译器
//将自动调用此函数将CRational类型的变量
//通过此函数转换为double
operator double(){
return static_cast<double>(_numerator)/_denominator;
}
void print() const {
cout << _numerator << "/" << _denominator;
}
private:
long _numerator, _denominator;
enum {BIG = 100};
};
// RationalPro.cpp : 定义控制台应用程序的入口点。
/*本例给出了设计者为自己的类型设计
类型转换函数的实例.
(1). 可通过类型的构造函数提供类型转换,如本例中的
CRational(double r),可将double类型变量转换为CRational
(2). 定义类型转换函数,如本例中,operator double()
该函数可在程序中"显示地",或"隐式地"被调用,实现
从CRational到double的转换.
*/
#include "stdafx.h"
#include "CRational.h"
/*以下定义三个同名的greater函数,这就是函数重载*/
int greater(int i, int j) { return ( i > j ? i : j); }
double greater(double x, double y) { return ( x > y ? x : y); }
//为什么在此处没有overloading >,可以吗?
//注意此函数的执行过程
CRational greater(CRational w, CRational z) {
return ( w > z ? w : z);
}
int _tmain(int argc, _TCHAR* argv[])
{
int i = 10, j = 5; float x = 7.0; double y = 14.5;
CRational w(10), z(3.54);
//下面的y + z,不是基于操作符重载,而是基于
//类型转换来实现y + z的合法
cout << y + z;
cout << "/ngreater(" << i << ", " << j << ") = "
<< greater(i, j);
cout << "/ngreater(" << x << ", " << y << ") = "
<< greater(x, y);
cout << "/ngreater(" << i << ", " ; z.print(); cout << ") = "
//下面显示地调用从double到rational的conversion
<< greater(static_cast<CRational>(i), z);
//下面隐式地调用从rational到double的conversion
cout << "/ngreater("; w.print(); cout << ", "; z.print(); cout << ") = ";
greater(w, z).print();
return 0;
}
相关文章推荐
- 实训C++语言设计——Rational有理数的运算实现
- 实训C++语言设计——实现复数运算
- 实训C++语言设计——实现复数运算
- 实训C++语言设计——Date日期系统实现
- 实现一个用分子分母的格式来表示有理数的结构体rational以及相关的函数,rational结构体之间可以做加减乘除运算,运算的结果仍然是rational
- 实训C++语言设计——Date日期系统实现
- 实训C++语言设计——Stack 栈运算
- 实训C++语言设计——Stack 栈运算
- 设计一个日期类Date,包括年、月、日等私有成员。要求实现日期的基本运算,例如某日期加上天数或减去天数
- 实训C++语言设计——多项式Polynomial运算
- Android实训案例(四)——关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程!
- 实训C++语言设计——数组元素的排序查找
- 基于逻辑运算的简单权限系统(原理,设计,实现) VBS 版
- C++语言使用字符数组实现大数加减乘除运算
- 设计一个时间类Time, 包括时,分,秒等私有数据成员。要求实现时间的基本运算,一个时间加上另一个时间。。
- 实训C++语言设计——稀疏矩阵SparseMatrix
- 实训C++语言设计——多项式Polynomial运算
- 实训C++语言设计——文件和流
- qt用设计器实现简单四则运算计算器
- 设计一个windows应用程序,实现不同运算。