#include <iostream>
enum ConvertType
{
Celsius = -1,
Fahrenheit = -2
};
class Converter
{
protected:
ConvertType _type;
public:
Converter( ConvertType t ) : _type( t ) {}
double Convert( double val )
{
if ( _type == Celsius ) // Convert to celsius
return 1.8 * val + 32;;
return ( val / 1.8 ) - 32;
}
};
static Converter CreateConverter(ConvertType type)
{
return Converter(type);
}
static void DoConvertion(short choice)
{
using ct = ConvertType; // ct = ConvertType
auto converter = CreateConverter( ( choice == 1 ? ct( -1 ) : ct( -2 ) ) ); // If choice == 1 convert to celcius, else convert to fahrenheit
double temp = 0.0;
std::cout << "Enter temperature: ";
std::cin >> temp;
std::cout << "Result: " << converter.Convert(temp) << std::endl;
}
int main()
{
short choice = 1;
std::cout << "Enter choice: ";
std::cin >> choice;
DoConvertion(choice);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKZW51bSBDb252ZXJ0VHlwZQp7CglDZWxzaXVzID0gLTEsCglGYWhyZW5oZWl0ID0gLTIKfTsKCmNsYXNzIENvbnZlcnRlcgp7CnByb3RlY3RlZDoKCUNvbnZlcnRUeXBlIF90eXBlOwoKcHVibGljOgoJQ29udmVydGVyKCBDb252ZXJ0VHlwZSB0ICkgOiBfdHlwZSggdCApIHt9CgoJZG91YmxlIENvbnZlcnQoIGRvdWJsZSB2YWwgKQoJewoJCWlmICggX3R5cGUgPT0gQ2Vsc2l1cyApIC8vIENvbnZlcnQgdG8gY2Vsc2l1cwoJCQlyZXR1cm4gMS44ICogdmFsICsgMzI7OwoJCXJldHVybiAoIHZhbCAvIDEuOCApIC0gMzI7Cgl9Cn07CgpzdGF0aWMgQ29udmVydGVyIENyZWF0ZUNvbnZlcnRlcihDb252ZXJ0VHlwZSB0eXBlKQp7CglyZXR1cm4gQ29udmVydGVyKHR5cGUpOwp9CgpzdGF0aWMgdm9pZCBEb0NvbnZlcnRpb24oc2hvcnQgY2hvaWNlKQp7Cgl1c2luZyBjdCA9IENvbnZlcnRUeXBlOyAvLyBjdCA9IENvbnZlcnRUeXBlCglhdXRvIGNvbnZlcnRlciA9IENyZWF0ZUNvbnZlcnRlciggKCBjaG9pY2UgPT0gMSA/IGN0KCAtMSApIDogY3QoIC0yICkgKSApOyAvLyBJZiBjaG9pY2UgPT0gMSBjb252ZXJ0IHRvIGNlbGNpdXMsIGVsc2UgY29udmVydCB0byBmYWhyZW5oZWl0Cglkb3VibGUgdGVtcCA9IDAuMDsKCXN0ZDo6Y291dCA8PCAiRW50ZXIgdGVtcGVyYXR1cmU6ICI7CglzdGQ6OmNpbiA+PiB0ZW1wOwoJc3RkOjpjb3V0IDw8ICJSZXN1bHQ6ICIgPDwgY29udmVydGVyLkNvbnZlcnQodGVtcCkgPDwgc3RkOjplbmRsOwp9CgppbnQgbWFpbigpCnsKCXNob3J0IGNob2ljZSA9IDE7CglzdGQ6OmNvdXQgPDwgIkVudGVyIGNob2ljZTogIjsKCXN0ZDo6Y2luID4+IGNob2ljZTsKCURvQ29udmVydGlvbihjaG9pY2UpOwp9Cg==