C++中数学运算、比较、赋值操作符的重载
生活随笔
收集整理的這篇文章主要介紹了
C++中数学运算、比较、赋值操作符的重载
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1 C++中數學運算、比較、賦值操作符的重載
- 1.1 完善的復數類
1 C++中數學運算、比較、賦值操作符的重載
1.1 完善的復數類
復數類應該具有的操作:
- 運算:+,-,*,/
- 比較:==、!=
- 賦值:=
- 求模:modulus
我們需要利用操作符重載:
- 統一復數與實數的運算方式。
- 統一復數與實數的比較方式。
復數類的實現:
Complex.h:
#ifndef _COMPLEX_H_ #define _COMPLEX_H_class Complex {double a;double b; public:Complex(double a = 0, double b = 0);double getA();double getB();double getModulus();Complex operator + (const Complex& c);Complex operator - (const Complex& c);Complex operator * (const Complex& c);Complex operator / (const Complex& c);bool operator == (const Complex& c);bool operator != (const Complex& c);Complex& operator = (const Complex& c); };#endifComplex.cpp:
#include "Complex.h" #include "math.h"Complex::Complex(double a, double b) {this->a = a;this->b = b; }double Complex::getA() {return a; }double Complex::getB() {return b; }double Complex::getModulus() {return sqrt(a * a + b * b); }Complex Complex::operator + (const Complex& c) {double na = a + c.a;double nb = b + c.b;Complex ret(na, nb);return ret; }Complex Complex::operator - (const Complex& c) {double na = a - c.a;double nb = b - c.b;Complex ret(na, nb);return ret; }Complex Complex::operator * (const Complex& c) {double na = a * c.a - b * c.b;double nb = a * c.b + b * c.a;Complex ret(na, nb);return ret; }Complex Complex::operator / (const Complex& c) {double cm = c.a * c.a + c.b * c.b;double na = (a * c.a + b * c.b) / cm;double nb = (b * c.a - a * c.b) / cm;Complex ret(na, nb);return ret; }bool Complex::operator == (const Complex& c) {return (a == c.a) && (b == c.b); }bool Complex::operator != (const Complex& c) {return !(*this == c); }Complex& Complex::operator = (const Complex& c) {if( this != &c ){a = c.a;b = c.b;}return *this; }main.cpp:
#include <stdio.h> #include "Complex.h"int main() {Complex c1(1, 2);Complex c2(3, 6);Complex c3 = c2 - c1;Complex c4 = c1 * c3;Complex c5 = c2 / c1;printf("c3.a = %f, c3.b = %f\n", c3.getA(), c3.getB());printf("c4.a = %f, c4.b = %f\n", c4.getA(), c4.getB());printf("c5.a = %f, c5.b = %f\n", c5.getA(), c5.getB());Complex c6(2, 4);printf("c3 == c6 : %d\n", c3 == c6);printf("c3 != c4 : %d\n", c3 != c4);(c3 = c2) = c1;printf("c1.a = %f, c1.b = %f\n", c1.getA(), c1.getB());printf("c2.a = %f, c2.b = %f\n", c2.getA(), c2.getB());printf("c3.a = %f, c3.b = %f\n", c3.getA(), c3.getB());return 0; }參考資料:
總結
以上是生活随笔為你收集整理的C++中数学运算、比较、赋值操作符的重载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++中的二阶构造模式
- 下一篇: 考不上高中可以当兵吗?