-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathnumber.h
34 lines (26 loc) · 882 Bytes
/
number.h
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
32
33
34
#pragma once
#include <iostream>
template<class T>
class Number {
public:
Number(T value = T()) :value_(value) {}
T& value() { return value_; }
T value() const { return value_; }
operator T() const { return value_; }
Number operator+(const Number& b) const { return value_ + b.value_; }
Number operator-(const Number& b) const { return value_ - b.value_; }
Number operator*(const Number& b) const { return value_ * b.value_; }
Number operator/(const Number& b) const { return value_ / b.value_; }
Number operator%(const Number& b) const { return value_ % b.value_; }
private:
T value_;
};
using Int = Number<int>;
template<class T>
std::istream& operator>>(std::istream& is, Number<T>& a) {
return is >> a.value();
}
template<class T>
std::ostream& operator<<(std::ostream& os, const Number<T>& a) {
return os << a.value();
}