一个实现了简单+,+=,<<,等简单操作的无指针普通类:
头文件如下所示:
//
// Created by 浅笑 on 2022/11/26.
//
#ifndef CLION_PJ_COMPLEX_H
#define CLION_PJ_COMPLEX_H
class complex{
public:
complex(const double r=0,const double i=0):re(r),im(i){}
complex& operator +=(const complex&);
complex& operator =(const complex&);
double real() const {return re;}
double image() const {return im;}
private:
double re, im;
friend complex& __doapl(complex* , const complex&);
};
complex& __doapl(complex* ths, const complex& x){
ths->re += x.re;
ths->im += x.im;
return *ths;
}
complex& complex::operator+=(const complex &x) {
return __doapl(this, x);
}
complex& complex::operator=(const complex &x) {
this->re=x.real();
this->im=x.image();
return *this;
}
// 重载+操作
complex operator +(const complex& c1, const complex& c2){
return complex(c1.real()+c2.real(), c1.image()+c2.image());
}
complex operator +(const complex& c1, const double& c2){
return complex(c1.real()+c2, c1.image());
}
complex operator +(const double& c1, const complex& c2){
return complex(c1+c2.real(), c2.image());
}
inline double real(const complex &x){
return x.real();
}
inline double image(const complex &x){
return x.image();
}
// 重载输出
std::ostream& operator<<(std::ostream& os, const complex& x){
return os<<"("<<real(x)<<","<<image(x)<<")";
}
#endif //CLION_PJ_COMPLEX_H
测试一下:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<vector>
#include<algorithm>
#include<cstring>
#include<set>
#include<map>
#include<queue>
#include<string>
#include "complex.h"
using namespace std;
int main()
{
complex c1(1,2);
double a,b,c,d;
cin>>a>>b>>c>>d;
c1=complex(a,b);
complex c2=complex(c,d);
cout<<"c1:"<<c1<<endl;
cout<<"c2:"<<c2<<endl;
cout<<"c1+c2="<<(c1+c2)<<endl;
cout<<"c1+=c2"<<(c1+=c2)<<endl;
cout<<"c1:"<<c1<<endl;
cout<<"c2:"<<c2<<endl;
return 0;
}