C++演算子のリロードと友元関数-練習問題
2414 ワード
ヘッダファイルcomplex 0.h
ソースファイルcpp
Mainファイル:
実行結果は次のとおりです.
#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();
}
実行結果は次のとおりです.