Module 0
Subject :
Assignment name : cpp_module00
Expected files : Warlock.cpp Warlock.hpp
--------------------------------------------------------------------------------
Make a Warlock class. It has to be in Coplien's form.
It has the following private attributes :
* name (string)
* title (string)
Since they're private, you will write the following getters :
* getName, returns a reference to constant string
* getTitle, returns a reference to constant string
Both these functions will have to be callable on a constant Warlock.
Create the following setter:
* setTitle, returns void and takes a reference to constant string
Your Warlock will also have, in addition to whatever's required by Coplien's
form, a constructor that takes, in this order, its name and title. Your Warlock
will not be able to be copied, instantiated by copy, or instantiated without a
name and a title.
For example :
Warlock bob; //Does not compile
Warlock bob("Bob", "the magnificent"); //Compiles
Warlock jim("Jim", "the nauseating"); //Compiles
bob = jim; //Does not compile
Warlock jack(jim); //Does not compile
Upon creation, the Warlock says :
<NAME>: This looks like another boring day.
Of course, whenever we use placeholders like <NAME>, <TITLE>, etc...
in outputs, you will replace them by the appropriate value. Without the < and >.
When he dies, he says:
<NAME>: My job here is done!
Our Warlock must also be able to introduce himself, while boasting with all its
might.
So you will write the following function:
* void introduce() const;
It must display:
<NAME>: I am <NAME>, <TITLE>!
Here's an example of a test main function and its associated output:
int main()
{
Warlock const richard("Richard", "Mistress of Magma");
richard.introduce();
std::cout << richard.getName() << " - " << richard.getTitle() << std::endl;
Warlock* jack = new Warlock("Jack", "the Long");
jack->introduce();
jack->setTitle("the Mighty");
jack->introduce();
delete jack;
return (0);
}
~$ ./a.out | cat -e
Richard: This looks like another boring day.$
Richard: I am Richard, Mistress of Magma!$
Richard - Mistress of Magma$
Jack: This looks like another boring day.$
Jack: I am Jack, the Long!$
Jack: I am Jack, the Mighty!$
Jack: My job here is done!$
Richard: My job here is done!$
~$
Warlock.hpp
#pragma once
#include <iostream>
class Warlock
{
private:
std::string name;
std::string title;
Warlock();
Warlock(Warlock const &other);
Warlock &operator=(Warlock const &other);
public:
Warlock(std::string const &name, std::string const &title);
~Warlock();
std::string const &getName() const;
std::string const &getTitle() const;
void setTitle(std::string const &title);
void introduce() const;
};
Warlock.cpp
#include "Warlock.hpp"
Warlock::Warlock(std::string const &name, std::string const &title)
{
this->name = name;
this->title = title;
std::cout << this->name << ": This looks like another boring day.\n";
}
Warlock::~Warlock() {std::cout << this->name << ": My job here is done!\n";}
std::string const &Warlock::getName() const { return (this->name);}
std::string const &Warlock::getTitle() const { return (this->title);}
void Warlock::setTitle(std::string const &title) { this->title = title;}
void Warlock::introduce() const { std::cout << this->name << ": I am " << this->name << ", " << this->title << "!\n";}
Last updated
Was this helpful?