C++实现输入输出运算符重载、友元函数和成员函数实现复数类Complex

今天答应帮朋友做一个C++题目,颇费了一番周折,终于还是写出来了,让很久没敲代码的我反省了一下,也回忆了以前学过的知识。

题目要求如下:

一、按下列要求编制复数类,并调试通过:

1)  基本的构造函数;

2)  成员运算符+、-实现复数的加减运算;

3)  友元运算符+、-实现更合理的加减运算;

4)  运算符<<和>>实现复数类的输出输入。


做题之前小小的闲扯一下这里要用到的知识点吧。

多态性:是指同样的消息被不同类型的对象接收时导致不同的行为。

面向对象的多态性分为四类:重载多态,强制多态,包含多态,参数多态

下面要用到运算符重载多态。

多态性从实现的角度来讲分为两类:

A.编译时的多态:在编译过程中确定了同名操作的具体操作对象。

B.运行时的多态:在程序运行过程中动态的确定操作所针对的具体对象。

而确定操作的具体对象的过程也就是传说中的绑定(联编)。绑定说的通俗一点就是把一个标识符名和一个存储地址联系在一起的过程。

而绑定又分为:静态绑定和动态绑定。

静态绑定:绑定工作在编译连接阶段完成的情况。

动态绑定:绑定工作在运行阶段完成的情况。

下面我们要用到的运算符重载就属于静态绑定。

程序代码如下:

#include<iostream.h>

class Complex
{
	public:
		Complex(double r=0.0,double i=0.0):real(r),imag(i)
		{
			cout<<"使用了拷贝构造函数"<<endl;
		}
		Complex operator+ (const Complex &c2)const;	//通过成员函数实现两个复数的加减操作
		Complex operator- (const Complex &c2)const;
		
		friend Complex operator+(const Complex &c1,const Complex &c2);	//通过友元函数实现两个复数的加减操作
		friend Complex operator-(const Complex &c1,const Complex &c2);
		
		friend istream &operator>> (istream &input,Complex &c);	//重载输入输出运算符
		friend ostream &operator<< (ostream &out,const Complex &c);
	
	private:
		double real;
		double imag;			
} ;

Complex Complex::operator+ (const Complex &c2)const
{
	return Complex(this->real+c2.real,this->imag+c2.imag);
}
Complex Complex::operator- (const Complex &c2)const
{
	return Complex(this->real-c2.real,this->imag-c2.imag);
}

Complex operator+(const Complex &c1,const Complex &c2)
{
	return Complex(c1.real+c2.real,c1.imag+c2.imag);
}
Complex operator-(const Complex &c1,const Complex &c2)
{
	return Complex(c1.real-c2.real,c1.imag-c2.imag);
}

istream &operator>> (istream &input,Complex &c)
{
	input>>c.real>>c.imag;
	return input;
}
ostream &operator<< (ostream &out,const Complex &c)
{
	out<<"("<<c.real<<","<<c.imag<<")"<<endl;
	return out;
}

int main()
{
	Complex c1(5,4),c2,c3;
	cin>>c2;	//调用输入运算符

	cout<<c1<<c2<<c3;	//调用重载过后的输出运算符

	c3=c1.operator +(c2);	//明确调用成员函数
	cout<<c3;
	
	c3=operator +(c1,c2);	//调用友元函数
	cout<<c3;
	
	return 0;
}

程序运行截图如下:


注:本程序是在VC++6.0中编写的,用其他编译器可能需要修改一下头文件,这是VC6.0的一个BUG。
  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来为您编写一个 Complex实现以下功能: 1. 包含两个整数成员变量实部和虚部; 2. 友元函数实现++运算符重载; 3. 成员函数实现﹣﹣运算符重载; 4. 友元函数实现运算符重载; 5. 实现输入输出运算符重载。 代码如下: ```c++ #include <iostream> using namespace std; class Complex { private: int real; // 实部 int imag; // 虚部 public: // 构造函数 Complex(int real = 0, int imag = 0) { this->real = real; this->imag = imag; } // 友元函数实现++运算符重载 friend Complex operator++(Complex &a, int) { Complex old = a; a.real++; a.imag++; return old; } // 成员函数实现﹣﹣运算符重载 Complex operator--() { real--; imag--; return *this; } // 友元函数实现运算符重载 friend Complex operator*(const Complex &a, const Complex &b) { Complex c; c.real = a.real * b.real - a.imag * b.imag; c.imag = a.real * b.imag + a.imag * b.real; return c; } // 实现输入输出运算符重载 friend ostream& operator<<(ostream &out, const Complex &c) { out << c.real << "+" << c.imag << "i"; return out; } friend istream& operator>>(istream &in, Complex &c) { cout << "请输入实部和虚部,格式为:实部 虚部" << endl; in >> c.real >> c.imag; return in; } }; int main() { Complex c1, c2; cin >> c1 >> c2; cout << "c1 = " << c1 << endl; cout << "c2 = " << c2 << endl; Complex c3 = c1 * c2; cout << "c1 * c2 = " << c3 << endl; cout << "c1++ = " << c1++ << endl; cout << "--c2 = " << --c2 << endl; return 0; } ``` 您可以在 `main()` 函数中进行测试,可以自行修改输入输出的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值