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