Lab-1
The goal of this lab is to better familiarize you with polymorphism and the factory design pattern, two key components in Assignment. To that end, you will construct a simple "Device Maker." The device will be made from a list of widgets in a text file that will be user-specified. You will need to create a widget factory to convert the name of the widget into the actual widget.
UML Diagrams
Let's start with the Widget and its derived classes:
![](https://www.mywordsolution.com/data:image/png;base64,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)
![188_Untitled.png](https://www.mywordsolution.com/CMSImages/188_Untitled.png)
Note that Widget is declared as an interface. This means that all of Widget's class methods are pure virtual. Pure virtual methods do not have method bodies. Instead, we place the keyword "virtual" before the return type and set them to equal zero (yes, this makes little sense, but that's how C++ does it). For example, the getPrice method would look like:
virtual double getPrice() const = 0;
Defining methods as pure virtual tells C++ that the class' children will be responsible for actually implementing any real functionality. Note that Widget's children (Gear, Cog, Actuator, and Spring) add no additional functionality to Widget. Instead, they simply define the functionality as required by Widget. To that end, each getName() should just return the Widget's name (e.g. "Gear"). Prices for each widget are as follows:
- Gear: $1.25
- Cog: $1.35
- Actuator: $3.50
- Spring: $0.99
Device Class
Let's next look at the Device class:
![1531_Untitled2.png](https://www.mywordsolution.com/CMSImages/1531_Untitled2.png)
I'm using _component_counter to track the number of valid Widgets inside _components. Also, Device revisits some advanced concepts that you might've forgotten about. Note that _components is a Widget **. This means that _components is an array of pointers to Widgets (hence the double *). You will need to initialize this variable inside your constructor using the following snippet:
_components = new Widget*[100];
This tells C++ to dynamically create _components as an array of 100 Widget pointers. Because we've dynamically created an array of pointers, we finally get to create a useful destructor! In your destructor, you will need to use the delete keyword to delete your array of pointers:
delete[] _components;
Note that we use array syntax "[]" to tell C++ that we want to delete an array of dynamic pointers rather than just a single dynamic pointer.
Widget Factory
Finally, let's examine our Widget Factory:
![611_Untitled2.png](https://www.mywordsolution.com/CMSImages/611_Untitled2.png)
Our factory has a single static method that returns a pointer to a dynamically created widget. To do so, you will need to examine the supplied text (it should contain the widget's name) and convert to the appropriate widget. In the case that an unrecognized name was supplied, simply return a NULL pointer.