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. Ubuntu14.4下安装FTP

    今天学习了Ubuntu上安装ftp的实例. 1.window上已经安装wamp(windows + apache + mysql + php) 2.window上已安装VMware Workstati ...

  2. Multiview

    新建3个ViewController的类 新建main.stroyboard,并配置好相应的布局(编辑界面,连接视图与类,ViewController的Storyboard ID,连接3个Button ...

  3. util.inherits

    util.inherits util.inherits(constructor, superConstructor)是一个实现对象间原型继承 的函数. JavaScript 的面向对象特性是基于原型的 ...

  4. 红黑树C++实现

    1 /* 2 * rbtree.h 3 * 1. 每个节点是红色或者黑色 4 * 2. 根节点是黑色 5 * 3. 每个叶子节点是黑色(该叶子节点就空的节点) 6 * 4. 如果一个节点是红色,则它的 ...

  5. ITMS-SERVICES://方式安装IPA在IOS 7.1中的变化

    转:https://laoyur.com/?p=414 iOS7.1中,通过itms-services://方式安装ipa已经发生了改变,.plist文件必须是https://的,.ipa文件的链接则 ...

  6. 微信小程序直播

    微信小程序直播(转) 通过PC实现推流,然后用小程序进行直播播放,也就是PC->小程序. 小程序支持 小程序的直播能力只针对某些类目开放并且需要申请开通. 支持的类目 社交 直播 教育 在线教育 ...

  7. [LintCode] 通配符查询

    动态规划: class Solution { public: /** * @param s: A string * @param p: A string includes "?" ...

  8. CoordinatorLayout Behaviors使用说明[翻译]

    翻译与:Intercepting everything with CoordinatorLayout Behaviors 使用过Android Design Support Library的小伙伴应该 ...

  9. DES加密原理

    DES加密步奏: 1.初始化两个字符串,一个为指定的秘钥,一个为初始化向量,要求是8个字符. 2.加密:秘钥.向量.需加密的字符串传换成byte[]类型: 声明加密标准类,DESCryptoServi ...

  10. ES6通过WeakMap解决内存泄漏问题

    一.Map 1.定义 Map对象保存键值对,类似于数据结构字典:与传统上的对象只能用字符串当键不同,Map对象可以使用任意值当键. 2.语法 new Map([iterable]) 属性 size:返 ...