반응형
▣ 복소수(complex number)
● 복소수는 실수부와 허수부로 구성된다.
▷ 복소수의 표현 : a + jb ( a : 실수부 값, b : 허수부 값)
● 켤레복소수 (complex conjugate)
▷ 켤레복소수의 표현 : a - jb (허수부의 부호가 반대)
● 복소수 연산
▷ 덧셈은 쉬우니까 넘어가고
▷ 곱셈은 (a + jb)(d + je) = (ad - be) + j(ae + bd)
▷ 나눗셈은 (a + jb) / (d + je) = (ad + be) / (d^2+e^2) + j (bd - ae) / (d^2+e^2)
▣ 복소수 클래스
● Complexx 클래스
▷ 복소수를 표현하는 클래스
▷ 복소수의 사칙연산과 켤레복소수를 구하는 멤버함수를 갖고 있다.
▷ 실수부의 값이 a, 허수부의 값이 b일 때, (a + jb) 로 출력된다.
멤버함수 | 비고 |
Complexx(double r, double i) | 생성자 |
Complexx conj( ) | 켤레복소수 반환 |
Complexx add(const Complexx& c) | 덧셈 |
Complexx sub(const Complexx& c) | 뺄셈 |
Complexx mul(const Complexx& c) | 곱셈 |
Complexx div(const Complexx& c) | 나눗셈 |
void display( ) | 복소수 값 출력 |
● Complexx 클래스 - Complexx.h
#include <iostream>
using namespace std;
class Complexx{
double rPart, iPart; //실수부, 허수부
public:
//생성자
Complexx(double r=0, double i=0) : rPart(r), iPart(i) {}
Complexx conj() const {
return Complexx(rPart, -iPart);
}
Complexx add(const Complexx& c) const {
return Complexx(rPart + c.rPart, iPart + c.iPart);
}
Complexx sub(const Complexx& c) const {
return Complexx(rPart - c.rPart, iPart - c.iPart);
}
Complexx mul(const Complexx& c) const
{
double r = rPart * c.rPart - iPart * c.iPart;
double i = rPart * c.iPart + iPart * c.rPart;
return Complexx(r, i);
}
Complexx div(const Complexx& c) const
{
double d = c.rPart * c.rPart + c.iPart * c.iPart;
Complexx c1 = mul(c.conj());
return Complexx(c1.rPart/d, c1.iPart/d);
}
void display() const
{
cout << "[" << rPart;
if (iPart > 0)
cout << "+j" << iPart;
else if (iPart < 0)
cout << "-j" << -iPart;
cout << "]";
}
};
- 생성자, 더하기 add, 빼기 sub, 곱하기 mul, 나누기 div, 복소수 형태로 출력 display 기능을 구현한다.
- conj( )함수에서 원래 객체의 데이터가 바뀌지 않도록 const로 지정한다.
- return 명령으로 이름이 없는 임시 객체인 Complexx 객체를 반환한다.
- display( )함수에서 허수부가 0일 수도 있기 때문에 허수부가 양수일 때, 음수일 때를 나눠서 출력한다.
● Complexx 클래스 - Main.cpp
#include <iostream>
#include "Complexx.h"
using namespace std;
int main()
{
Complexx c1(12,23);
Complexx c2(23,34);
Complexx c3 = c1.add(c2); //default copy constructor
c1.display();
cout << " + ";
c2.display();
cout << " = ";
c3.display();
cout << endl;
c3 = c1.mul(7.0); //묵시적 형변환
c1.display();
cout << " * 7 = ";
c3.display();
cout << endl;
return 0;
}
- Complexx c3 = c1.add(c2)에서 컴파일러에 의해 디폴트 복사 생성자가 동작한다.
- 처음 c3 객체에는 c1+c2의 값이 들어간다.
- c3 = c1.mul(7.0);에서 mul 함수의 매개변수로 Complexx 객체만 받았기 때문에 7.0이 묵시적 형변환으로 Complexx(7.0)으로 바뀐다.
- Complexx.h에서 생성자가 Complexx(double r=0, double i=0) 형태였기 때문에 c3 = c1.mul(Complexx(7.0, 0.0));로 해석된다.
● 실행결과
728x90
반응형
'Programming > C++' 카테고리의 다른 글
C++ 언어 기초 (9) - 연산자 다중정의 (0) | 2020.08.31 |
---|---|
[C++] 위임 생성자, 초기화 리스트 생성자 (0) | 2020.08.29 |
[C++] 자료구조 스택 Stack 구현하기 (0) | 2020.08.28 |
C++ 언어 기초 (8) - static 데이터 멤버와 static 멤버함수 (0) | 2020.08.28 |
C++ 언어 기초 (7) - 디폴트/복사/이동 생성자 (0) | 2020.08.28 |