C++演算子のリロードと友元関数-練習問題

2414 ワード

ヘッダファイルcomplex 0.h
#pragma once
#include <iostream>
class complex0
{
	double real;
	double img;
public:
	complex0(void);
	complex0(double a, double b);
	~complex0(void);

	complex0 operator~() const;
	complex0 operator+(complex0 &c) const;
	complex0 operator-(complex0 &c) const;
	complex0 operator*(complex0 &c) const;
	complex0 operator*(double r) const;
	friend complex0 operator*(double r, complex0 &c)
	{
		return c*r;
	}
	friend std::ostream & operator<<(std::ostream &os, complex0 &c);
	friend std::istream & operator>>(std::istream &is, complex0 &c);


};

ソースファイルcpp
#include "complex0.h"


complex0::complex0(void)
{
}

complex0::complex0(double a, double b)
{
	this->real = a;
	this->img = b;
}

complex0::~complex0(void)
{
}

complex0 complex0::operator~() const
{
	return complex0(real, -img);
}

complex0 complex0::operator+(complex0 &c) const
{
	return complex0(c.real+real, c.img+img);
}
complex0 complex0::operator-(complex0 &c) const
{
	return complex0(real-c.real, img-c.img);
}
complex0 complex0::operator*(complex0 &c) const
{
	double A=real,B=img,C=c.real,D=c.img;
	return complex0(A*C-B*D, A*D+B*C);
}
complex0 complex0::operator*(double r) const
{
	return complex0(real*r, img*r);
}

std::ostream & operator<<(std::ostream &os, complex0 &c)
{
	if(c.img>=0)
		os<<c.real<<"+"<<c.img<<'i';
	else
		os<<c.real<<c.img<<'i';
	return os;
}


std::istream & operator>>(std::istream &is, complex0 &c)
{
	std::cout<<"plz input real: ";
	is>>c.real;
	std::cout<<"plz input img: ";
	is>>c.img;
	std::cout<<"c is "<<c<<std::endl;
	return is;
}

Mainファイル:
#include <iostream>
#include "complex0.h"
using namespace std;



int main()
{
	complex0 c1(3.0, 4.0);
	complex0 c2;
	cin>>c2;

	cout<<"3*c2\t"<<3*c2<<endl;
	cout<<"c1+c2\t"<<c1+c2<<endl;
	cout<<"c1*c2\t"<<c1*c2<<endl;
	cout<<"c1-c2\t"<<c1-c2<<endl;
	cout<<"~c1\t"<<~c1<<endl;

	cin.get();
	cin.get();
}

実行結果は次のとおりです.