【C++】 复数类操作

复数的概念我们高中已经接触过,包含是实部和虚部,

For example:2i + 3J;实部和虚部值可为整型,亦可浮点型,那在此实现一下简单的复数类的操作

代码如下:

class Complex
{
public:

    Complex(double real,double imag)
    {
        _real = real;
        _imag = imag;
    }

    Complex(const Complex& c)
    {
        _real = c._real;
        _imag = c._imag;
    }

    ~Complex()
    {
        
    }
    
    Complex& operator=(const Complex& c)
    {
        if(&c != this)
        {
        this->_real = c._real;
        this->_imag = c._imag;
        }
        return *this;
    }
    
    Complex operator+(const Complex& c)
    {
        Complex ret(*this);// + 运算返回运算后的值

        ret._real += c._real;
        ret._imag += c._imag;
        
        return ret;
    }

    Complex& operator++() // 前置++ , 当外面需要此返回值时,需要加&
    {
        this->_real += 1;
        this->_imag += 1;

        return *this;
    }

    Complex operator++(int) // 后置++ ,当外面不需要此返回值时,无需加&
    {
        Complex tmp(*this);//后置++返回原来的值,故定义一个临时变量保存起来

        this->_real += 1;
        this->_imag += 1;

        return tmp;
    }

    
    Complex& operator+= (const Complex& c)
    {
        this->_real = this->_real + c._real;
        this->_imag = this->_imag + c._imag;

        return *this;
    }

    inline bool operator==(const Complex& c)
    {
        return (_real == c._real 
                && _imag == c._imag);
    }

    inline bool operator>(const Complex& c)
    {
        return (_real > c._real
                && _imag > c._imag);
    }

    inline bool operator>=(const Complex& c)
    {
        
        //return (_real >= c._real
        //        && _imag >= c._imag);

        return (*this > c) || (*this == c);//直接使用上面实现重载符 > 和 ==

    }

    inline bool operator<=(const Complex& c)
    {
        //return (_real <= c._real
        //        && _imag <= c._imag);

        return !(*this > c);//直接使用上面实现重载符 > 
    
    }

    bool operator<(const Complex& c)
    {
        return !(*this > c) || (*this == c);//直接使用上面实现重载符 >= 
    }

    inline void Display()
    {
        cout<<_real<<"-"<<_imag<<endl;
    }

private:

    double _real;
    double _imag;

};

测试单元:(偷懒就在main函数里测试,可以单独封装一个函数进行测试)

int main()
{
    Complex c(1,2);
    Complex c1(c);

    //c1.Display();
    //Complex ret = ++c1;
    //Complex ret = c1++;
    //ret.Display();
    Complex ret(c1);
    ret.Display();

    return 0;
}
时间: 2024-12-26 04:48:50

【C++】 复数类操作的相关文章

侯捷《C++面向对象开发》——动手实现自己的复数类

前言 最近在看侯捷的一套课程<C++面向对象开发>,刚看完第一节introduction之后就被疯狂圈粉.感觉侯捷所提及所重视的部分也正是我一知半解的知识盲区,我之前也写过一些C++面向对象的程序,不过正如侯捷所说,我还仅仅停留于Object-based层面,写程序时总是在想如何封装好一个类,而不是Object-oriented强调类与类之间关系的设计. 这门课程分为两部分,第一部分讲Object-based,第二部分讲Object-oriented:第一部分又分为两部分:带指针的类的封装和不

第31课 完善的复数类

复数类: 程序如下: 1 #ifndef _COMPLEX_H_ 2 #define _COMPLEX_H_ 3 4 class Complex 5 { 6 double a; 7 double b; 8 public: 9 Complex(double a = 0, double b = 0); 10 double getA(); 11 double getB(); 12 double getModulus(); 13 14 Complex operator + (const Complex&

C++--操作符重载 复数类

一.操作符重载 Q:下面的复数解决方案是否可行? class Complex { public: int a; int b; }; int main() { Complex c1={1,2}; Complex c2={3,4}; Complex c3=c1+c2; return 0; } 该段代码想要实现的是将两个复数类进行相加得出第三个类代码实现的运行结果由上面的结果图可以得知,出现的错误是无法匹配+号操作符的操作,同时出现 的潜在问题是a与b是public成员,在实际的操作中应将a与b设置为

C#基础------File类操作文件

//File类操作文件 不需要new //1.Exists(判断文件是否存在) //2.ReadAllLines(把文件每一行读取出来,放到一个字符串数组中) //3.ReadAllText(把文件中的内容读取到一个字符串里) //4.WriteAllText(把字符串写入到文件里,覆盖以前的内容) //5.AppendAllText(把字符串追加到文件里,内容会追加在后面) //6.Copy(把目标文件拷贝到另一个文件) //Directory 操作文件夹 //1.CreateDirector

【内存类操作】浅谈内存拷贝异常

结合本人在实际项目中所积累的经验,以及曾经犯过的错误,堆内存操作类函数做一个简单的剖析,抛砖引玉,欢迎大家吐槽. 首先,讲一下内存使用异常发生的几种场景. 1.野指针的使用,使用已经释放的指针,如果向野指针中写内容,就极有可能导致设备重启或任务挂死.因为,正在运行的任务的地址被意外的改写. [避免策略]函数入参要判空,指针使用(包括释放)之前一定要释放. 2.内存函数的错误使用: void *memset(void *s, int ch, size_t n); c语言中在<memory.h>或

C++习题 复数类--重载运算符+,-,*,/

Description 定义一个复数类Complex,重载运算符"+","-","*","/",使之能用于复数的加.减.乘.除.运算符重载函数作为Complex类的成员函数.编写程序,分别求两个复数之和.差.积和商. Input 两个复数 Output 两个复数之和.差.积和商 Sample Input 3 4 5 -10 Sample Output c1+c2=(8.00,-6.00i) c1-c2=(-2.00,14.00

复数类

实现复数类的基本成员函数,复数之间比较大小以及复数的四则运算. 设z1 = a + bi,z2 = c + di(a.b.c.d∈R)是任意两个复数, 复数乘法: (a + bi)(c + di) = (ac - bd) + (bc + ad)i. 复数除法: (a + bi) / (c + di) = (ac + bd) / (c ^ 2 + d ^ 2) + (bc - ad) / (c ^ 2 + d ^ 2)i. 代码如下: #define _CRT_SECURE_NO_WARNINGS

【C++】复数类的实现

复数类的实现: 这个是以前学习的补全,记录一下吧. 复数类本身概念是具备一个实部_real和虚部_image,然后实现复数的加减乘除,自加自减还有等于符号的重载.算是一个基本的联系吧. 废话不多说,看看代码,很简单. Complex_class.h #include <iostream> #include <math.h> using namespace std; class Complex { private: double _real; double _imag; public

sdut 4-1 复数类的运算符重载

4-1 复数类的运算符重载 Time Limit: 1000MS Memory limit: 65536K 题目描述 通过本题目的练习可以掌握成员运算符重载及友元运算符重载 要求定义一个复数类,重载加法和减法运算符以适应对复数运算的要求,重载插入运算符(<<)以方便输出一个复数的要求. 输入 要求在主函数中创建对象时初始化对象的值. 输出 输出数据共有4行,分别代表a,b的值和它们求和.求差后的值 示例输入 无 示例输出 a=3.2+4.5i b=8.9+5.6i a+b=12.1+10.1i