code refactoring: fix memory leaks, code style, etc.

This commit is contained in:
Jakub Vojvoda
2019-01-31 19:57:40 +01:00
parent a8681552c4
commit a0b0ea4f8e
24 changed files with 960 additions and 566 deletions

View File

@@ -19,10 +19,13 @@ class ConcreteElementB;
* declares a Visit operation for each class of ConcreteElement
* in the object structure
*/
class Visitor {
class Visitor
{
public:
virtual void visitElementA(ConcreteElementA *element) = 0;
virtual void visitElementB(ConcreteElementB *element) = 0;
virtual ~Visitor() {}
virtual void visitElementA( ConcreteElementA* const element ) = 0;
virtual void visitElementB( ConcreteElementB* const element ) = 0;
// ...
};
@@ -32,25 +35,35 @@ public:
* a fragment of the algorithm defined for the corresponding class
* of object in the structure
*/
class ConcreteVisitor1 : public Visitor {
class ConcreteVisitor1 : public Visitor
{
public:
void visitElementA(ConcreteElementA *) {
~ConcreteVisitor1() {}
void visitElementA( ConcreteElementA* const )
{
std::cout << "Concrete Visitor 1: Element A visited." << std::endl;
}
void visitElementB(ConcreteElementB *) {
void visitElementB( ConcreteElementB* const )
{
std::cout << "Concrete Visitor 1: Element B visited." << std::endl;
}
// ...
};
class ConcreteVisitor2 : public Visitor {
class ConcreteVisitor2 : public Visitor
{
public:
void visitElementA(ConcreteElementA *) {
~ConcreteVisitor2() {}
void visitElementA( ConcreteElementA* const )
{
std::cout << "Concrete Visitor 2: Element A visited." << std::endl;
}
void visitElementB(ConcreteElementB *) {
void visitElementB( ConcreteElementB* const )
{
std::cout << "Concrete Visitor 2: Element B visited." << std::endl;
}
// ...
@@ -60,9 +73,12 @@ public:
* Element
* defines an accept operation that takes a visitor as an argument
*/
class Element {
class Element
{
public:
virtual void accept(Visitor &visitor) = 0;
virtual ~Element() {}
virtual void accept( Visitor &visitor ) = 0;
// ...
};
@@ -70,18 +86,26 @@ public:
* Concrete Elements
* implement an accept operation that takes a visitor as an argument
*/
class ConcreteElementA : public Element {
class ConcreteElementA : public Element
{
public:
void accept(Visitor &visitor) {
visitor.visitElementA(this);
~ConcreteElementA() {}
void accept( Visitor &visitor )
{
visitor.visitElementA( this );
}
// ...
};
class ConcreteElementB : public Element {
class ConcreteElementB : public Element
{
public:
void accept(Visitor &visitor) {
visitor.visitElementB(this);
~ConcreteElementB() {}
void accept( Visitor &visitor )
{
visitor.visitElementB( this );
}
// ...
};
@@ -91,15 +115,15 @@ int main()
{
ConcreteElementA elementA;
ConcreteElementB elementB;
ConcreteVisitor1 visitor1;
ConcreteVisitor2 visitor2;
elementA.accept(visitor1);
elementA.accept(visitor2);
elementB.accept(visitor1);
elementB.accept(visitor2);
return 0;
}