Zweiter Schritt: Kopieren von Bäumen und Knoten besuchen
Ok, wir machen eigentlich zwei Schritte:
-
Der Copy-Konstruktor und Zuweisungs-Operator wird Implementiert. Letztlich wird das auf den Copy-Konstruktor der Node-Klasse zurückgeführt.
-
Wir implementieren noch zusätzlich die visit-Methode.
Ein Test-Programm das eigene Visit-Funktionen implementiert könnte so aussehen:
#include "trie.hpp"
#include <iostream>
template <typename Object>
struct Visitor
{
void
operator()(const Object &object) const
{
std::cout << "visit object:" << object << std::endl;
}
};
template <typename Object>
void
visit(const Object &object)
{
std::cout << "visit function:" << object << std::endl;
}
int
main()
{
Trie<double> trie_;
trie_.insert("Lehn", 42);
trie_.insert("Fo", 123);
trie_.insert("Lehr", 666);
trie_.insert("Lehr", 667);
trie_.insert("Lehr", 668);
Trie<double> trie;
trie = trie_;
std::cout << "visiting:" << std::endl;
trie.visit("Le", Visitor<double>());
std::cout << "visiting:" << std::endl;
trie.visit("", Visitor<double>());
trie.visit("", visit<double>);
}
#include <iostream>
template <typename Object>
struct Visitor
{
void
operator()(const Object &object) const
{
std::cout << "visit object:" << object << std::endl;
}
};
template <typename Object>
void
visit(const Object &object)
{
std::cout << "visit function:" << object << std::endl;
}
int
main()
{
Trie<double> trie_;
trie_.insert("Lehn", 42);
trie_.insert("Fo", 123);
trie_.insert("Lehr", 666);
trie_.insert("Lehr", 667);
trie_.insert("Lehr", 668);
Trie<double> trie;
trie = trie_;
std::cout << "visiting:" << std::endl;
trie.visit("Le", Visitor<double>());
std::cout << "visiting:" << std::endl;
trie.visit("", Visitor<double>());
trie.visit("", visit<double>);
}
Übersetzt man dies und führt man dies aus enthält man:
$shell> g++ -Wall -std=c++14 testit.cpp $shell> ./a.out Remove old object! Remove old object! visiting: visit object:42 visit object:668 visiting: visit object:123 visit object:42 visit object:668 visit function:123 visit function:42 visit function:668 $shell>