CIS29 - Example 5 - namespace my - my own cout
File: ns1.h
#ifndef NS1
#define NS1
#include <iostream>
#include <cassert>
namespace ns1
{
class fraction;
std::ostream& operator <<(std::ostream& out, const fraction&);
class fraction
{
private:
int numer, denom;
public:
explicit fraction(int n, int d) : numer(n), denom(d)
{
assert(denom != 0);
}
fraction operator+(const fraction&);
int getnumer() const { return numer; }
int getdenom() const { return denom; }
operator int() const;
friend std::ostream& operator <<(std::ostream& out, const fraction&);
};
}
#endif
File: ns2.h
#ifndef NS2
#define NS2
#include <iostream>
#include <cassert>
namespace ns2
{
class fraction;
fraction operator+(const fraction&, const fraction&);
std::ostream& operator <<(std::ostream& out, const fraction&);
class fraction
{
private:
int numer, denom;
public:
fraction(int n, int d) : numer(n), denom(d)
{
assert(denom != 0);
}
operator double() const;
int getdenom() const { return denom; }
int getnumer() const { return numer; }
friend std::ostream& operator <<(std::ostream& out, const fraction&);
friend fraction operator+(const fraction&, const fraction&) ;
};
}
#endif
File: ns1.cpp
#include "ns1.h"
using ns1::fraction;
fraction fraction::operator+(const fraction& f)
{
return fraction((numer*f.denom+denom*f.numer),denom*f.denom);
}
fraction::operator int() const
{
return numer/denom;
}
std::ostream& ns1::operator <<(std::ostream& out, const fraction& f)
{
out << f.getnumer() << '/' << f.getdenom();
return out;
}
File: ns2.cpp
#include "ns2.h"
using ns2::fraction;
fraction ns2::operator+(const fraction& f, const fraction& g)
{
return fraction((g.numer*f.denom+g.denom*f.numer),g.denom*f.denom);
}
fraction::operator double() const
{
return 1.*numer/denom;
}
std::ostream& ns2::operator <<(std::ostream& out, const fraction& f)
{
out << f.getnumer() << '/' << f.getdenom();
return out;
}
File: ns_main.cpp
#include "ns1.h"
#include "ns2.h"
#include <cstdlib>
using namespace std;
int main()
{
ns1::fraction f1(2,3);
ns2::fraction f2(3,4);
ns1::fraction f3(1,2);
ns2::fraction f4(1,4);
cout << f1 << endl;
cout << f2 << endl;
cout << f1 + f3 << endl;
cout << f1 + f2 << endl;
cout << f1 + 1 << endl;
cout << f1 + 1.5 << endl;
system("pause");
return 0;
}
***** Program output *****
2/3
3/4
7/6
0.75
1
1.5