printf("ho_tari\n");

Complex5 (타입캐스팅) 본문

C++

Complex5 (타입캐스팅)

호타리 2023. 9. 4. 09:52

<main.cpp>

#include <cstdio>

#include "complex.h"

#include <iostream>

#include "string.h"



int main()

{

	Complex c1;

	Complex c2 = 3.0;                // Complex c2(3.0)

	Complex c3(3.0, 4.0);

	const Complex c4 = c3;           // const Complex c4(c3)

	

	c1.real(c3.real());

	c1.imag(c3.imag());

	

	c1 = c3;

	if (c1 == c3)

	{

		std::cout << "c1 and c3 are equal" << std::endl;

	}

	else

	{

		std::cout << "c1 and c3 are not equal" << std::endl;

	}

	

	c1 != c3;

	

	c2 = c1 + c3;

	c2 = c1 - c3;

	

	++c1;     // c1.operator++()

	c1++;     // c1.operator++(int )

	

	std::cout << "c1 : (" << c1.real() << ", " << c1.imag() << "i)" << std::endl;

	std::cout << "c2 : (" << c2 << std::endl;

	std::cout << "c3 : (" << c3 << std::endl;

	std::cout << "c4 : (" << c4 << std::endl;

	

	String s;

	s = c1;          // s = (String)c1;

	

	std::cout << "s : " << s << std::endl;

	

	return 0;

}

 

<complex.h>

#ifndef COMPLEX_H

#define COMPLEX_H

#include <iostream>

#include "string.h"



class Complex{

friend std::ostream& operator<<(std::ostream& out, const Complex& rhs);



private:

	double re_;

	double im_;



public:

	//Complex() { } // is not generated

	//Complex *operator&() { return this; }

	//const Complex *operator&() const { return this; }

	

	Complex(double re = 0.0, double im = 0.0);

	

	//Complex(const Complex& rhs) { /* memberwise copy */ }

	//~Complex () { }

	

	//Complex& operator=(const Complex& rhs) { /* memberwise copy */ }

	// +=, -=, *=, /=

	

	bool operator==(const Complex& rhs) const;

	bool operator!=(const Complex& rhs) const;

	// >, <, >=, <=

	

	const Complex operator+(const Complex& rhs) const;

	const Complex operator-(const Complex& rhs) const;

	// *, /

	

	const Complex& operator++();

	const Complex operator++(int );

	

	operator String() const;

	

	double real() const;

	double imag() const;

	

	void real(double re);

	void imag(double im);



};



#endif

 

<complex.cpp>

#include "complex.h"

#include <cstdio>



std::ostream& operator<<(std::ostream& out, const Complex& rhs)

{

	out << rhs.real() << ", " << rhs.imag() << "i)";

	

	return out;

}



Complex::Complex(double re, double im)

{

	re_ = re;     // (this->) 생략 가능 : this->re_ = re_

	im_ = im;

}



bool Complex::operator==(const Complex& rhs) const

{

	return re_ == rhs.re_ && im_ == rhs.im_;

}



bool Complex::operator!=(const Complex& rhs) const

{

	return !this->operator==(rhs);

}



const Complex Complex::operator+(const Complex& rhs) const

{

	Complex result(re_ + rhs.re_, im_ + rhs.im_);

	

	return result;

}



const Complex Complex::operator-(const Complex& rhs) const

{

	Complex result(re_ - rhs.re_, im_ - rhs.im_);

	

	return result;

}



const Complex& Complex::operator++()

{

	re_ += 1.0;

	

	return *this;

}



const Complex Complex::operator++(int )

{

	Complex result = *this;

	re_ += 1.0;

	

	return result;

}



Complex::operator String() const

{

	char buf[100];

	sprintf(buf, "(%f, %fi)", re_, im_);

	

	String result(buf);

	

	return result;

}



double Complex::real() const

{

	return re_;

}



double Complex::imag() const

{

	return im_;

}



void Complex::real(double re)

{

	re_ = re;

}



void Complex::imag(double im)

{

	im_ = im;

}

 

<compile 결과>

'C++' 카테고리의 다른 글

Rational (라이브러리)  (0) 2023.09.05
Rational4 (증감연산자)  (0) 2023.09.04
Employee  (0) 2023.09.02
Complex4 (증감연산자)  (0) 2023.09.02
Rational2 (여러연산자)  (0) 2023.09.02