|
ex6-9.cpp - Example 6-9 Type Conversions (2) |
// File: ex6-9.cpp - More Type Conversions
#include <iostream>
#include <string>
using namespace std;
class Day; // forward declaration
class Number {
int n;
public:
Number(int i) : n(i) { cout << "Number(int) ctor called\n"; }
operator int() const;
operator Day() const;
};
Number::operator int() const
{
cout << "* Number::operator int() called\n";
return n;
}
string Days[7] =
{"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
class Day
{
string dow;
public:
// Constructor
Day(int n = 0);
// Conversion operator
operator Number() const; // convert Day to Number
// !operator prints dow
void operator!() { cout << "dow = " << dow << endl; }
};
Day::Day(int index)
: dow(Days[index % 7])
{
cout << "Day(int) ctor called\n";
}
Day::operator Number() const
{
cout << "** Day:: operator Number() called\n";
for (int i = 0; i < 7; i++) if (dow == Days[i]) return Number(i);
return Number(0);
}
Number::operator Day() const
{
cout << "* Number::operator Day() called\n";
return Day(n);
}
int main()
{
Number N1(65);
cout << "N1 = " << N1 << endl;
Day d1(1);
!d1;
// Day d2(N1); Why is this an ambiguity?
Number N2(d1);
cout << "N2 = " << N2 << endl;
!Day(Number(d1)+2);
return 0;
}
CIS27: Programming in C++ Instructor: Joe Bentley