Madlib with multiple .cpp's and .h's

Rewrite the assignment 6 submission, the Mad Lib Game, so that there is a new object, a storyWordManager object, instantiated from a StoryWordManager class. As this assignment requires an understanding of both pointers and classes, you will need to read Chapter 7 and Chapter 8 of our "Beginning C++ Through Game Programming" textbook. Note that for this and all subsequent assignments, each class will have its own ".h" file and its own ".cpp" file. This provides a valuable separation of an object interface from its implementation, respectively. These files will be named "MyClass.h" and "MyClass.cpp", where "MyClass" is replaced with the name of that particular class. In other words, in this assignment, you will have two new files, StoryWordManager.h and StoryWordManager.cpp.

Note also that for this and all subsequent assignments, each ".h" file will prevent multiple inclusions by making use of the "#ifndef" preprocessor directive "trick". This trick is described in detail on Page 396 of our supplementary textbook, "C++ Primer Plus". The gist of this technique is to ensure that every ".h" file begins with

#ifndef MYCLASS_H_
#define MYCLASS_H_

and ends with #endif

where "MYCLASS" is replaced with the name of the class being defined. If you ever encounter a "multiple definition" compiler error, it is most likely due to your having forgotten to make use of this technique or "trick". The madLib object will be given a pointer to the storyWordManager object as a parameter that is passed into the MadLib constructor. This means that within your "main" method, you will need to instantiate the storyWordManager object before you instantiate the madLib object (since you can't use a pointer to an object that doesn't yet exist!).

The storyWordManager object's constructor method will welcome the user to the game, prompt the user for the necessary story words (or numbers), and accept input from the cin object. The madLib object is responsible for building the story via string concatenation within its "tellStory" function. The madLib object will use its storyWordManagerPtr member variable (initialized within the MadLib constructor) to invoke public "get" methods upon the storyWordManager object to access the necessary story words as the madLib object builds and "tells" its story.

the following is my code that I had for my previous assignment...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
// Mad-Lib 4.0
// Mad-Lib game with classes and pointers

#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;

class StoryWordManager 
{
      public:
             StoryWordManager();
             
             string getName();
             string getNoun();
             string getBodyPart();
             string getVerb();
             
             int getNumber();
             
             string m_Name;
             string m_Noun;
             string m_BodyPart;
             string m_Verb;
              
             int m_Number;
             
      //private:
              string m_Prompt;
              
              string askText();
              int askNum();
              
              
};

StoryWordManager::StoryWordManager()
{
                                       
     cout << "Welcome to the Mad-Libs game.\n\n" << endl;
     cout << "Answer the questions to help create a story:\n\n" << endl;

     m_Prompt = "name";
     m_Name = askText();
     
     m_Prompt = "noun";
     m_Noun = askText();
     
     m_Prompt = "body part";
     m_BodyPart = askText();
     
     m_Prompt = "verb";
     m_Verb = askText();
     
	 m_Prompt = "number";
     m_Number = askNum();
     
}
     
string StoryWordManager::askText()
{   
       string text;
	   cout << "Please enter a " << m_Prompt << ":";
       cin >> text;
       return text;
}

int StoryWordManager::askNum()
{
    int num;
	cout << "Please enter a number:";
    cin >> num;
    return num;
}

string StoryWordManager::getName()
{
      return m_Name;
}

string StoryWordManager::getNoun()
{
      return m_Noun;
}

string StoryWordManager::getBodyPart()
{
      return m_BodyPart;
}

string StoryWordManager::getVerb()
{
      return m_Verb;
}
int StoryWordManager::getNumber()
{
      return m_Number;
}

class MadLib
{
      public:
             MadLib(StoryWordManager*);

};

MadLib::MadLib(StoryWordManager* StoryWordManagerPtr)
{
                                    
    cout << "\n\nHere's your story:\n\n";
    cout << "The famous explorer ";
    cout << (*StoryWordManagerPtr).getName();
    cout << " had nearly given up a life-long quest to find\n";
    cout << "The Lost City of ";
    cout << (*StoryWordManagerPtr).getNoun();
    cout << " when one day, the ";
    cout << (*StoryWordManagerPtr).getNoun();
    cout << " found the explorer.\n\n";
    cout << "Surrounded by ";
    cout << (*StoryWordManagerPtr).getNumber();
    cout << " " << (*StoryWordManagerPtr).getNoun();
    cout << ", a tear came to ";
    cout << (*StoryWordManagerPtr).getName() << "'s ";
    cout << (*StoryWordManagerPtr).getBodyPart() << ".\n";
    cout << "After all this time, the quest was finally over. ";
    cout << "And then, the ";
    cout << (*StoryWordManagerPtr).getNoun() << "\n";
    cout << "promptly devoured ";
    cout << (*StoryWordManagerPtr).getName() << ". ";
    cout << "\n\nThe moral of the story?... Be careful what you wish for";                       
                                 
                                 
}

int main()
{
    StoryWordManager userInput;
    userInput.askText();
    userInput.askNum();
    
	StoryWordManager* StoryWordManagerPtr; 

    return 0;
}



I just don't understand how to go about disecting that into five different files (two object .h's, two object .cpp's, and a main .cpp).

I had something but it was only one .h and 2 .cpp's so it wouldn't have passed for something acceptable. (I also accidently hit save (when I was altering the code) so I really have nothing left from those three files either). BACK TO SQUARE ONE

Thanks for any help in advance. I have some projects coming up similar to this but I just need help breaking everything down so I can understand the future assignments (2 .h's, 2 .cpp's, 1 main .cpp).
Last edited on
You have two classes, you can put their prototypes in the .h's, Madlib.h and StoryWordManager.h, and the definitions of those functions in their own .cpps, maybe Madlib.cpp and StoryWordManager.cpp, and a Driver or Main.cpp with the main. Make sure to include the necessary includes in the cpps.
Topic archived. No new replies allowed.