Description
Design four classes named Peter, AmericanPeter, AngryPeter, AmericanAngryPeter. Please smartly derived these four classes from five existed classes Speak, Greet, AngryGreet, AmericanStyle, Curse.
Note that there is a private variable named level in Curse which controls what kinds of curse words that can be used. For example, people with curse level 1, may use level 1 curse word like: “You stupid!”, but cannot use level 2 curse word like: “Asshole!” or above. People with curse level 2 may use both level 1 and level 2 curse words, but cannot use level 3 curse word like: “F*** You!!!” or above.
Speak:
Public Methods:
- void speak(string sentence) – Should print :sentence. For example, if parsed sentence is “Hello world!”, than print “:Hello world!”.
Greet:
Public Methods:
- string greet_toString() – Should return string “How’s it going?”.
AngryGreet:
Public Methods:
- string angryGreet_toString() – Should return string “...(Angry men won't greet)”.
AmericanStyle:
Public Methods:
- string american_toString() – Should return string “Yo!”.
Curse:
Private Variable:
- level(int) as curse level.
Public Methods:
- string curse_toString(int type) – Should return different type of curse word. For example, curse_toString(2), should return string “Asshole!”. If the curse word is beyond its curse level, should return string “……”.
Protected Methods:
- void set_curseLevel(int _l) – Should set curse level to _l.
// YOU NEED TO IMPLEMENT BELOW FOUR CLASSES
Peter:
Public Methods:
- void greet() – Should print “:How’s it going?”, just like a normal person.
AmericanPeter:
Public Methods:
- void greet() – Should print “:Yo! How’s it going?”, just like a normal American
AngryPeter: (must derived from Curse)
Constructors:
- The parameterized constructor AngryPeter(int _l) should initialize AngryPeter’s curse level to _l.
Public Methods:
- void greet() – Should print “:...(Angry men won't greet)”, just like a normal angry person.
- void curse(int t) – Should print 4 different kinds of curse words based on t and curse level.
t = 1 & curse level !< 1, print “:You stupid!”
t = 2 & curse level !< 2, print “:Asshole!”
t = 3 & curse level !< 3, print “:F*** you!!!”
t = 4 & curse level !< 4, print “:You Son of a b****!!!”
all the other cases should print “:……”.
AmericanAngryPeter: (must derived from Curse)
Constructors:
- The parameterized constructor AmericanAngryPeter(int _l) should initialize AmericanAngryPeter’s curse level to _l.
Public Methods:
- void greet() – Should print “:Yo! ...(Angry men won't greet)”, just like a normal angry American.
- void curse(int t) – Should print 4 different kinds of curse words based on t and curse level.
t = 1 & curse level !< 1, print “:Yo! You stupid!”
t = 2 & curse level !< 2, print “:Yo! Asshole!”
t = 3 & curse level !< 3, print “:Yo! F*** you!!!”
t = 4 & curse level !< 4, print “:Yo! You Son of a b****!!!”
all the other cases should print “:Yo! ……”.
main.cpp
#include <iostream>
#include <string>
using namespace std;
void check();
class Speak
{
public:
void speak(string sentence)
{
cout << ":" << sentence << endl;
}
};
class Greet
{
public:
string greet_toString()
{
return "How's it going?";
}
};
class AngryGreet // 生氣氣??
{
public:
string angryGreet_toString()
{
return "...(Angry men won't greet)";
}
};
class AmericanStyle
{
public:
string american_toString()
{
return "Yo!";
}
};
class Curse
{
public:
string curse_toString(int type)
{
string curse = "......";
switch (type)
{
case 1:
if (type <= level)
curse = "You stupid!";
break;
case 2:
if (type <= level)
curse = "Asshole!";
break;
case 3:
if (type <= level)
curse = "F*** you!!!";
break;
case 4:
if (type <= level)
curse = "You Son of a b****!!!";
break;
}
return curse;
}
protected:
void set_curseLevel(int _l)
{
level = _l;
}
private:
int level;
};
/* Todo */
// 1. Please design four classes named Peter, AmericanPeter, AngryPeter, AmericanAngryPeter, respectly
// 2. Peter without anger may do greet() with sentence from class Greet
// Peter with anger may do greet() with sentence from class AngryGreet, and curse(int i)
// 3. American Peter or American angry Peter need to have an american style beginning everytime they greet() and curse(int i);
// Hint:
// 1. Properly inherit above class may help!!
// 2. Angry Peter might set his curse_level before he curses
// Don't touch below functions when submitting the code
void check()
{
int testcase;
cin >> testcase;
if (testcase == 1)
{
// when Peter meets Peter
Peter peter1 = Peter();
Peter peter2 = Peter();
peter1.greet();
peter2.greet();
}
if (testcase == 2)
{
// when Peter meets Peter from America
Peter peter1 = Peter();
AmericanPeter peter2 = AmericanPeter();
peter1.greet();
peter2.greet();
}
if (testcase == 3)
{
// when Peter meets level 1 angry Peter
Peter peter1 = Peter();
AngryPeter peter2 = AngryPeter(1);
peter1.greet();
peter2.greet();
peter1.greet();
peter2.curse(1);
}
if (testcase == 4)
{
// when level 1 angry Peter from America meets an level 4 angry Peter
AmericanAngryPeter peter1 = AmericanAngryPeter(1);
AngryPeter peter2 = AngryPeter(4);
peter1.greet();
peter2.greet();
peter1.curse(1);
peter2.curse(1);
peter1.curse(2);
peter2.curse(2);
peter1.curse(3);
peter2.curse(3);
peter1.curse(4);
peter2.curse(4);
}
if (testcase == 5)
{
// when level 4 angry Peter meets an level 4 angry Peter from America
AngryPeter peter1 = AngryPeter(4);
AmericanAngryPeter peter2 = AmericanAngryPeter(4);
peter1.greet();
peter2.greet();
peter1.curse(1);
peter2.curse(1);
peter1.curse(2);
peter2.curse(2);
peter1.curse(3);
peter2.curse(3);
peter1.curse(4);
peter2.curse(4);
}
}
int main()
{
check();
return 0;
}
Input
No need to handle input. (Input would be number 1~5 to represent the index of test-case)
Output
No need to handle output.
Tags