1、设计一个Complex(复数)类,完成如下要求:

该类具有实部(Real_Part)和虚部(Image_Part)
通过重载运算符“+”实现两个复数的相加
通过重载运算符“+”实现一个复数与一个数值的相加,其结果为复数的实部加上这个数值
重载“-”运算符,实现复数的减法。
重载“++”运算符,实现复数实部的自增
重载“>>”运算符和 “<<”运算符,实现复数的输入和输出
重载“==”,判断两个复数是否相等
提示:输入输出运算符只能重载为类的友元函数,形式如下
 friend ostream &operator<<(ostream &os,const Complex &c); friend istream &operator>>(istream &is,Complex &c);

#include <cstdio>
#include <iostream.h> // vc 6.0
#include <string>
#include <cstring>
#include <vector>
// using namespace std; class Complex { friend ostream &operator<<(ostream &os,const Complex &c);
friend istream &operator>>(istream &is,Complex &c); friend Complex operator+(const Complex &c1,const Complex &c2);
friend Complex operator+(const Complex &c1,int num);
friend Complex operator-(const Complex &c1,const Complex &c2); friend bool operator==(const Complex &c1,const Complex &c2); public:
Complex(): r(), i() {}
Complex(int r, int i): r(r), i(i) {} Complex& operator++() {
++r;
return *this;
} const Complex operator++(int) {
r++;
return *this;
} private:
int r, i;
}; ostream &operator<<(ostream &os,const Complex &c) {
os << c.r << "+" << c.i << "i\n";
return os;
} istream &operator>>(istream &is,Complex &c) {
is >> c.r >> c.i;
return is;
} Complex operator+(const Complex &c1,const Complex &c2) {
Complex x;
x.r = c1.r + c2.r;
x.i = c1.i + c2.i;
return x;
} Complex operator+(const Complex &c1,int num) {
Complex x;
x.r = c1.r + num;
x.i = c1.i;
return x;
} Complex operator-(const Complex &c1,const Complex &c2) {
Complex x;
x.r = c1.r - c2.r;
x.i = c1.i - c2.i;
return x;
} bool operator==(const Complex &c1,const Complex &c2) {
if (c1.r == c2.r && c1.i == c2.i) return true;
return false;
} void testIO() {
Complex x(, );
cout << x;
cin >> x;
cout << x;
} void testAdd() {
Complex c1(, );
Complex c2(, );
cout << c1 - c2 + << endl;
} void testAdd2() {
Complex x1, x2;
x1 = x2++;
cout << x1 << endl;
// cout << x << endl;
} void testEqual() {
Complex x1, x2;
cout << (x1 == x2) << endl;
} int main()
{
// testIO();
// testAdd();
// testAdd2();*
testEqual();
return ;
}

2. 问题描述:有理数是一个可以化为一个分数的数,例如2/3,533/920,-12/49都是有理数,而√2就为无理数。在C++中,并没有预先定义有理数,需要时可以定义一个有理数类,将有理数的分子和分母分别存放在两个整型变量中。对有理数的各种操作都可以用重载运算符来实现。
基本要求: 定义并实现一个有理数类,通过重载运算符+、-、*、/对有理数进行算术运算,通过重载运算符==实现判定两个有理数是否相等。写一个优化函数,它的作用是使有理数约去公分母(4/6=2/3),也即是使保存的有理数分子和分母之间没有公约数(除去1以外)。

Ⅰ、未重载运算符版

#include <iostream>
#include <cstdio>
#include <string>
using namespace std; class Number {
friend void print(Number& x);
friend int gcd(int a, int b);
private:
int m;
int n;
public:
Number(): m() {}
Number(int m, int n): m(m), n(n) {}
void add(Number& b) {
m = m * b.n + n * b.m;
n = n * b.n;
stdlize();
}
void minus(Number& b) {
m = m * b.n - n * b.m;
n = n * b.n;
stdlize();
}
void multi(Number& b) {
m = m * b.m;
n = n * b.n;
stdlize();
}
void divide(Number& b) {
m = m / b.m;
n = n / b.n;
stdlize();
}
void stdlize() {
int x = gcd(m, n);
m = m / x;
n = n / x;
}
}; int gcd(int a, int b)
{
int m = a, n = b, r = -;
while (r != ) {
r = m % n;
m = n;
n = r;
}
return m;
} void print(Number& x)
{
printf("%d/%d\n", x.m, x.n);
} int main()
{
// test add
printf("test add: 1/15 + 4/15 = ");
Number a(, );
Number b(, );
a.add(b);
print(a); // test minus
printf("test minus: 2/3 - 1/3 = ");
Number c(, );
Number d(, );
c.minus(d);
print(c); // test multi
printf("test multi: 2/4 * 4/3 = ");
Number e(, );
Number f(, );
e.multi(f);
print(e); // test divide
printf("test divide: 1/12 div 1/3 = ");
Number g(, );
Number h(, );
g.divide(h);
print(g); return ;
}

Ⅱ、重载运算符版(待)

3、自定义一个Array类,可以根据下标和上标分配空间,并自动判断是否溢出,定义函数实现对数据的赋值,删除等操作。自行编写测试函数实现可以对输入数组的下标和上标,根据其下标和上标分配内存空间并赋值,重载赋值运算符 << 与=可以实现将一个数组的输出与 a1=a2的操作。

#include <cstdio>
#include <iostream.h> // vc 6.0
#include <string>
#include <cstring>
#include <vector>
// using namespace std; class Array { friend istream &operator>>(istream &is, Array &arr);
friend ostream &operator<<(ostream &os, Array &arr); public:
Array(int begin, int end): begin(begin), end(end) {
arr = new int[end-begin+];
}
~Array() {
delete []arr;
}
private:
int *arr;
int begin, end;
}; istream &operator>>(istream &is, Array &arr) {
for (int i = arr.begin; i <= arr.end; ++i) {
is >> arr.arr[i-arr.begin];
}
return is;
} ostream &operator<<(ostream &os, Array &arr) {
for (int i = arr.begin; i <= arr.end; ++i) {
os << arr.arr[i-arr.begin] << " ";
}
os << endl;
return os;
} int main()
{
Array arr(,); // arr[0]. arr[1]
cin >> arr;
cout << arr; return ;
}

【c++习题】【17/5/8】重载运算符的更多相关文章

  1. YTU 2443: C++习题 复数类--重载运算符3+

    2443: C++习题 复数类--重载运算符3+ 时间限制: 1 Sec  内存限制: 128 MB 提交: 1368  解决: 733 题目描述 请编写程序,处理一个复数与一个double数相加的运 ...

  2. YTU 2442: C++习题 矩阵求和--重载运算符

    2442: C++习题 矩阵求和--重载运算符 时间限制: 1 Sec  内存限制: 128 MB 提交: 1457  解决: 565 题目描述 有两个矩阵a和b,均为2行3列.求两个矩阵之和.重载运 ...

  3. YTU 2441: C++习题 复数类--重载运算符2+

    2441: C++习题 复数类--重载运算符2+ 时间限制: 1 Sec  内存限制: 128 MB 提交: 847  解决: 618 题目描述 定义一个复数类Complex,重载运算符"+ ...

  4. YTU 2440: C++习题 复数类--重载运算符+,-,*,/

    2440: C++习题 复数类--重载运算符+,-,*,/ 时间限制: 1 Sec  内存限制: 128 MB 提交: 1189  解决: 774 题目描述 定义一个复数类Complex,重载运算符& ...

  5. YTU 2439: C++习题 复数类--重载运算符+

    2439: C++习题 复数类--重载运算符+ 时间限制: 1 Sec  内存限制: 128 MB 提交: 1022  解决: 669 题目描述 定义一个复数类Complex,重载运算符"+ ...

  6. C++习题 复数类--重载运算符2+

    Description 定义一个复数类Complex,重载运算符"+",使之能用于复数的加法运算.参加运算的两个运算量可以都是类对象,也可以其中有一个是整数,顺序任意.例如,c1+ ...

  7. C++习题 复数类--重载运算符+

    Description 定义一个复数类Complex,重载运算符"+",使之能用于复数的加法运算.将运算符函数重载为非成员.非友元的普通函数.编写程序,求两个复数之和. Input ...

  8. 第十五周oj刷题——Problem M: C++习题 矩阵求和--重载运算符

    Description 有两个矩阵a和b,均为2行3列.求两个矩阵之和.重载运算符"+",使之能用于矩阵相加(如c=a+b). 重载流插入运算符"<<&quo ...

  9. C++ Primer 学习笔记_63_重载运算符和转换 --转换和类类型【上】

    重载运算符和转换 --转换与类类型[上] 引言: 在前面我们提到过:能够用一个实參调用的位 unsignedchar 相同范围的值,即:0到255. 这个类能够捕获下溢和上溢错误,因此使用起来比内置u ...

随机推荐

  1. Java深入理解文章(转载)

    引用自:http://droidyue.com/ninki/ JVM运行时的数据区 http://droidyue.com/blog/2014/12/21/java-runtime-data-area ...

  2. redo

    --创建redosize的视图create or replace view redo_size as select value from v$mystat, v$statname where v$my ...

  3. JavaWeb中文乱码问题解决思路

    1.提交页面请求或者服务器端的响应时,需要确保页面编码当时与服务器编码方式是否一致. 2.对于从服务器写入数据库中的数据和从数据库中读取到服务器中的数据,需要确保服务器编码方式与数据库编码方式是否一致 ...

  4. C语言函数重入

    C语言函数重入 可重入函数:可以被中断的函数,即这个函数执行时,可以中断其执行,可以由一个或多个任务并发使用,而不比担心数据错误. 不可重入函数(不安全函数) 不能运行在多任务环境下,除非能保证互斥( ...

  5. js获取上个月的第一天和最后一天

    var now = new Date(); var fd = new Date(now.getFullYear(), now.getMonth()-1 ,1).toLocaleDateString() ...

  6. .Net Core 知识了解:一跨平台的奥秘

    学习一下.Net Core 查看了技术大拿的文章 .NET Core跨平台的奥秘[上篇]:历史的枷锁 一下是学习资料 对于计算机从业人员来说,“平台(Platform)”是一个我们司空见惯的词语,在不 ...

  7. EXCEL自动导出HTML

    话说博主我以前总是为资料共享的问题发愁,刚才鼓捣了一下EXCEL.发现有个功能还是不错的'发布' 以OFFICE2013为标准吧. 点击文件--导出-- 更改文件类型---另存为--(网页)htm 点 ...

  8. 第4章 x86反汇编速成班

    4.1 抽象层次 硬件<微指令<机器码<低级语言<高级语言<解释型语言 4.2 逆向工程 4.3 x86体系结构 冯-诺依曼体系结构 中央处理器(CPU): 负责执行代码 ...

  9. 目标检测系列 --- RCNN: Rich feature hierarchies for accurate object detection and semantic segmentation Tech report

    目标检测系列 --- RCNN: Rich feature hierarchies for accurate object detection and semantic segmentation Te ...

  10. mfc中 控件 对话框 添加颜色 背景图片

    1 设置对话框透明 在设置控件颜色中要使用 nCtlColor Contains one of the following values, specifying the type of control ...