Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 모의 주식
- 코딩
- 프로그래머스
- 빅데이터
- SNS
- 자바
- 프로그램
- 코테
- java
- 풀스택프레임워크
- 코딩테스트
- 자바정리
- 개발자
- C++
- 코딩독학
- frontend
- Project
- java정리
- 개발
- 사물인터넷
- Python
- 개인프로젝트
- 코스닥
- 자바독학
- 이웃한 칸
- backend
- 프로그래밍
- 주가예측
- 백준
- Reflex
Archives
- Today
- Total
Creative Code
main.cpp(rational클래스 증감연산자) 본문
※main.cpp파일
#include <iostream>
#include "rational.h"
int main() {
Rational r1; // 0
Rational r2(3); // 3/1
Rational r3(3,4); // 3/4
std::cout << "r1 : " << r1 << std::endl;
std::cout << "r1 + r2 : " << r1+r2 <<std::endl;
std::cout << "r2 * r3 : " << r2*r3 << std::endl;
std::cout << "r2 == r3 : " << (r2==r3) << std::endl;
std::cout << "r2 > r3 : " << (r2>r3) << std::endl;
std::cout << "r2 / r3 : " << (r2/r3) << std::endl;
r3++;
std::cout << "r3 : " << r3 << std::endl;
++r3;
std::cout << "r3 : " << r3 << std::endl;
}
※rational.h파일
#ifndef RATIONAL_H
#define RATIONAL_H
#include <iostream>
class Rational {
friend std::ostream& operator<<(std::ostream& out, const Rational& rhs);
private:
int num_;
int den_;
public:
Rational(int num = 0, int den = 1);
Rational& operator+=(const Rational& rhs);
bool operator>(const Rational& rhs) const;
bool operator==(const Rational& rhs) const;
bool operator!=(const Rational& rhs) const;
const Rational operator+(const Rational& rhs) const;
const Rational operator-(const Rational& rhs) const;
const Rational operator*(const Rational& rhs) const;
const Rational operator/(const Rational& rhs) const;
const Rational& operator++();
const Rational operator++(int );
};
#endif
※rational.cpp파일
#include "rational.h"
#include <cassert>
#include "gcd.h"
std::ostream& operator<<(std::ostream& out, const Rational& rhs) {
out << "(" << rhs.num_ << "/" << rhs.den_ << ")";
return out;
}
Rational::Rational(int num, int den) {
int g = gcd(num,den);
num_ = num/g;
den_ = den/g;
}
Rational& Rational::operator+=(const Rational &rhs) {
num_ = num_ * rhs.den_ + den_*rhs.num_;
den_ = den_ * rhs.den_;
int g = gcd(num_,den_);
num_ /= g;
den_ /= g;
return *this;
}
bool Rational::operator>(const Rational &rhs) const {
double result1 = (double)(num_)/(double)(den_);
double result2 = (double)(rhs.num_)/(double)(rhs.den_);
return result1>result2;
}
bool Rational::operator==(const Rational &rhs) const {
int g1 = gcd(num_,den_);
int g2 = gcd(rhs.num_,rhs.den_);
return (num_/g1 == rhs.num_/g2 && den_/g1 == rhs.den_/g2);
}
bool Rational::operator!=(const Rational &rhs) const {
return !(*this==rhs);
}
const Rational Rational::operator+(const Rational &rhs) const{
int num1 = num_ * rhs.den_ + den_ * rhs.num_;
int den1 = den_ * rhs.den_;
return Rational(num1,den1);
}
const Rational Rational::operator-(const Rational &rhs) const {
int num1 = num_ * rhs.den_ - den_ * rhs.num_;
int den1 = den_ * rhs.den_;
return Rational(num1,den1);
}
const Rational Rational::operator*(const Rational &rhs) const {
int num1 = num_ * rhs.num_;
int den1 = den_ * rhs.den_;
return Rational(num1,den1);
}
const Rational Rational::operator/(const Rational &rhs) const {
assert(rhs.num_!=0);
int num1 = num_ * rhs.den_;
int den1 = den_ * rhs.num_;
return Rational(num1,den1);
}
const Rational& Rational::operator++() {
num_ /= gcd(num_,den_);
den_ /= gcd(num_,den_);
num_ += den_;
return *this;
}
const Rational Rational::operator++(int ) {
num_ /=gcd(num_,den_);
den_ /=gcd(num_,den_);
Rational result(*this);
num_ += den_;
return result;
}
※gcd.h파일
#ifndef GCD_H
#define GCD_H
extern "C" int gcd(int a, int b); //c로 만들어진 코드를 다른 언어에서 사용할 때 extern "C"사용
#endif
※ gcd.c파일
#include <stdio.h>
int gcd(int a, int b) {
int remain;
while (remain = a%b){
a =b;
b =remain;
}
return b;
}
'C++ Programming' 카테고리의 다른 글
main.cpp(Rational클래스 라이브러리) (0) | 2023.09.04 |
---|---|
main.cpp(타입캐스팅) (0) | 2023.09.04 |
main.cpp(complex클래스 증감연산자) (0) | 2023.09.01 |
main.cpp(employee클래스) (0) | 2023.09.01 |
main.cpp(컴파일러가 자동생성하는 함수) (0) | 2023.09.01 |