复数的格式:a + bi
第一种方式:
using namespace std;
class Complex{
public:
double real;
double imaginary;
public:
Complex(double r = 0, double i = 0);
Complex(const Complex& c);
~Complex();
void show(void);
};
Complex::Complex(double r,double i){//带默认参数,不填写参数就调用默认参
real = r;
imaginary = i;
}
Complex::Complex(const Complex& c) {
real = c.real;
imaginary = c.imaginary;
}
Complex::~Complex(void) {
cout << "析构完成" << endl;
}
void Complex::show(void) {
cout << real << "+" << imaginary << "i" << endl;
}
Complex add(const Complex& c1, const Complex& c2) {
Complex x;
x.real = c1.real + c2.real;
x.imaginary = c1.imaginary + c2.imaginary;
return x;
}
Complex sub(const Complex& c1, const Complex& c2) {
Complex x;
x.real = c1.real - c2.real;
x.imaginary = c1.imaginary - c2.imaginary;
return x;
}
int main(void) {
Complex c1(1, 2);
c1.show();
Complex c2(2, 2);
c2.show();
Complex c3;
c3=add(c1,c2);
c3.show();
return 0;
}
优点:代码简洁,复数的定义与+/-操作是分开的,比较好
缺点:类中没有体现复数的操作(实际上这个是优点)
第二中方式:
using namespace std;
class Complex{
private:
double real;
double imaginary;
public:
Complex(double r = 0, double i = 0);
Complex(const Complex& c);
~Complex();
void show();
void add(const Complex& c1, const Complex& c2);
void sub(const Complex& c1, const Complex& c2);
};
Complex::Complex(double r,double i){//带默认参数,不填写参数就调用默认参
real = r;
imaginary = i;
}
Complex::Complex(const Complex& c) {
real = c.real;
imaginary = c.imaginary;
}
Complex::~Complex(void) {
cout << real << "+" << imaginary << "i"<< "析构完成" << endl;
}
void Complex::show(void) {
cout << real << "+" << imaginary << "i" << endl;
}
void Complex::add(const Complex& c1, const Complex& c2) {
real = c1.real + c2.real;
imaginary = c1.imaginary + c2.imaginary;
}
void Complex::sub(const Complex& c1, const Complex& c2) {
real = c1.real - c2.real;
imaginary = c1.imaginary - c2.imaginary;
}
int main(void) {
Complex c1(1, 2);
c1.show();
Complex c2(2, 2);
c2.show();
Complex c3;
c3.add(c1,c2);
c3.show();
return 0;
}
优点:复数的定义与操作都集中到一个类中(实际上这个有时是缺点,进行其他的运算时会导致改动比较大)
缺点:这个类的设计太过集中,有点过度设计,后续一旦有新的需求不好维护
学校课本上的代码:
#include<iostream>
using namespace std;
class Complex {
private:
double real;
double imaginary;
public:
Complex(double r = 0, double i = 0);
Complex(const Complex& c);
~Complex();
void show(void);
Complex add(const Complex& c);
Complex sub(const Complex& c);
};
Complex::Complex(double r, double i) {//带默认参数,不填写参数就调用默认参
real = r;
imaginary = i;
}
Complex::Complex(const Complex& c) {
real = c.real;
imaginary = c.imaginary;
}
Complex::~Complex(void) {
cout << real << "+" << imaginary << "i" << "析构完成" << endl;
}
void Complex::show(void) {
cout << real << "+" << imaginary << "i" << endl;
}
Complex Complex::add(const Complex& c) {
Complex x;
x.real = real + c.real;
x.imaginary = imaginary + c.imaginary;
return x;
}
Complex Complex::sub(const Complex& c) {
Complex x;
x.real = real - c.real;
x.imaginary = imaginary - c.imaginary;
return x;
}
int main(void) {
Complex c1(1, 2);
c1.show();
Complex c2(2, 2);
c2.show();
Complex c3;
c3 = c1.add(c2);
c3.show();
Complex c4;
c4 = c1.add(c2);
c4.show();
return 0;
}
比较合理,言简意赅