Library 4

bug fix (see prev. commit)
This commit is contained in:
Alessandro Ferro 2021-05-25 15:58:25 +02:00
parent 828a41dd72
commit b7c12b8c8a
3 changed files with 15 additions and 11 deletions

View File

@ -61,9 +61,13 @@ const Data& BinaryTree<Data>::Node::Element() const{
/* ----- end of struct Node ----- */ /* ----- end of struct Node ----- */
template <typename Data> template <typename Data>
bool BinaryTree<Data>::operator==(const BinaryTree& toCompare) const noexcept{ bool BinaryTree<Data>::operator==(const BinaryTree& tree) const noexcept{
if(size!=toCompare.size) return false; if(size == tree.size){
return(Root() == toCompare.Root()); if(size == 0) return true;
else return (Root() == tree.Root());
}else{
return false;
}
} }
template <typename Data> template <typename Data>

View File

@ -140,14 +140,15 @@ BinaryTreeLnk<Data>& BinaryTreeLnk<Data>::operator=(BinaryTreeLnk<Data>&& tree)
return *this; return *this;
} }
/*
** operator== and operator!= can be removed from BinaryTreeLnk since they are
** inherited from BinaryTree. They're here just for clarity and because they're
** in the template.
** Maybe you can make them more optimized here.
*/
template <typename Data> template <typename Data>
bool BinaryTreeLnk<Data>::operator==(const BinaryTreeLnk<Data>& tree) const noexcept{ bool BinaryTreeLnk<Data>::operator==(const BinaryTreeLnk<Data>& tree) const noexcept{
if(size == tree.size){ return (BinaryTree<Data>::operator==(tree));
if(size == 0) return true;
else return (Root() == tree.Root());
}else{
return false;
}
} }
template <typename Data> template <typename Data>

View File

@ -15,11 +15,10 @@ protected:
protected: protected:
using BinaryTree<Data>::Node::data; using BinaryTree<Data>::Node::data;
public:
struct NodeLnk* left = nullptr; struct NodeLnk* left = nullptr;
struct NodeLnk* right = nullptr; struct NodeLnk* right = nullptr;
public:
struct NodeLnk& operator=(const NodeLnk&); // Copy assignment of abstract types should not be possible. struct NodeLnk& operator=(const NodeLnk&); // Copy assignment of abstract types should not be possible.
struct NodeLnk& operator=(NodeLnk&&) noexcept; // Move assignment of abstract types should not be possible. struct NodeLnk& operator=(NodeLnk&&) noexcept; // Move assignment of abstract types should not be possible.
bool IsLeaf() const noexcept override; // (concrete function should not throw exceptions) bool IsLeaf() const noexcept override; // (concrete function should not throw exceptions)