C++中较为常见的类―复数类,主要实现复数比较大小、加、减、乘、除等基本运算,通过C++类和对象进行实现。C++的类和对象是笔试、面试中容易问到的,因此,对其掌握一定要通透。下面是复数类功能的具体实现。
#define _CRT_SECURE_NO_WARNINGS 1 //复数类 #include <iostream> #include <stdlib.h> using namespace std; class complex { public: complex(double real = 0.0, double image = 0.0) //构造函数 { //cout << "complex(double real, double image)" << endl; //用于查看构造函数调用多少次 _real = real; _image = image; } complex(const complex & c) //拷贝构造函数,注意引用符,若为值传递则可能会引发无穷递归 { //cout << "complex(const complex & c)" << endl; _real = c._real; _image = c._image; } ~complex() //析构函数 { //cout << "~complex" << endl; } complex & operator=(const complex& c) //赋值操作符的重载 { if (this != &c) { this->_real = c._real; this->_image = c._image; } return *this; } bool operator==(const complex & c) //判相等 { return _real == c._real && _image == c._image; } bool operator>(const complex & c) //大于 { if ((_real > c._real) || (_real == c._real && _image > c._image)) { return true; } else return false; } bool operator<(const complex & c) //小于 { if ((_real < c._real) || (_real == c._real && _image < c._image)) { return true; } else return false; } complex operator+(const complex & c) //复数加法 { complex tmp; tmp._real = _real + c._real; tmp._image = _image + c._image; return tmp; } complex & operator+=(const complex & c) //+= { _real += c._real; _image += c._image; return *this; } complex operator-(const complex & c) //复数减法 { complex tmp; tmp._real = _real - c._real; tmp._image = _image - c._image; return tmp; } complex & operator-=(const complex & c) //-= { _real -= c._real; _image -= c._image; return *this; } complex operator*(const complex & c) //复数乘法 { complex tmp; tmp._real = _real*c._real - _image*c._image; tmp._image = _real*c._image + _image*c._real; return tmp; } complex & operator*=(const complex & c) //复数*= { *this = *this * c; return *this; } complex operator/(const complex & c) //复数除法 { complex tmp; // x = (ac + bd) / (cc + dd), y = (bc - ad) / (cc + dd); tmp._real = (_real * c._real + _image * c._image) / (c._real*c._real + c._image*c._image); tmp._image = (_image * c._real - _real * c._image) / (c._real*c._real + c._image*c._image); return tmp; } complex operator/=(const complex & c) //复数/= { *this = *this / c; return *this; } void Display() //打印 { cout << _real << "-" << _image << endl; } private: double _real; double _image; }; //测试用例 void Test() { complex p1; p1.Display(); complex p2(1.0, 2.0); p2.Display(); complex p3(p1); p3.Display(); complex p4 = p1; p4.Display(); } void Text1() { complex p1(2.0, 3.0); complex p2(4.0, 5.0); p1.Display(); p2.Display(); bool ret; ret = p1 == p2; cout<< ret << endl; ret = p1 > p2; cout<< ret << endl; ret = p1 < p2; cout<< ret << endl; } void Text2() { //加减乘除 complex p1(1.0, 2.0); complex p2(2.0, 3.0); complex tmp; tmp = p1 + p2; tmp.Display(); tmp = p1 - p2; tmp.Display(); tmp = p1 * p2; tmp.Display(); tmp = p1 / p2; tmp.Display(); } int main() { //Test(); //Text1(); Text2(); system("pause"); return 0; }
本文出自 “无心的执着” 博客,转载请与作者联系!