Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // TemplateSpecializationInheritance.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include <iostream>
- using namespace std;
- /*THIS IS THE OLD STRUCTURE*/
- class Device
- {
- public:
- virtual void Print() = 0;
- };
- class InputDevice: public Device
- {
- public:
- void Print() override { cout << "InputDevicePrint" << endl; }
- virtual void InputPrint() = 0;
- };
- class InputOutputDevice: public Device
- {
- public:
- void Print() override { cout << "InputOutputDevicePrint" << endl; }
- virtual void InputPrint() = 0;
- virtual void OutputPrint() = 0;
- };
- class OldInput:public InputDevice
- {
- public:
- void InputPrint() override { cout << "OldInputPrint" << endl; }
- };
- class OldInputOutput:public InputOutputDevice
- {
- public:
- void InputPrint() override { cout << "OldInputPrint" << endl; }
- void OutputPrint() override { cout << "OldOutputPrint" << endl; }
- };
- /*THE NEW ENVELOPE*/
- template <typename T> class NewInputDevice:public T
- {
- public:
- void Print() override { cout << "newPrint" << endl; }
- void InputPrint() override { cout << "NewInputPrint" << endl; }
- };
- class NewInputOutputPrint:public NewInputDevice<InputOutputDevice>
- {
- public:
- void OutputPrint() override { cout << "NewOutputPrint" << endl; }
- };
- int main()
- {
- OldInput oInput;
- oInput.Print(); //Shows InputDevicePrint
- oInput.InputPrint(); //Shows OldInputPrint
- OldInputOutput oInputOutput;
- oInputOutput.Print(); //Shows InputDevicePrint
- oInputOutput.InputPrint(); //Shows OldInputPrint
- oInputOutput.OutputPrint(); //Shows OldOutputPrint
- NewInputDevice<InputDevice> nInput;
- nInput.Print(); //Shows NewPrint
- nInput.InputPrint(); //Shows NewInputPrint
- NewInputOutputPrint nInputOutpur;
- nInputOutpur.Print(); //Shows NewPrint
- nInputOutpur.InputPrint(); //Shows NewInputPrint
- nInputOutpur.OutputPrint(); //NewOutputPrint
- return 0;
- }
Add Comment
Please, Sign In to add comment