-
Notifications
You must be signed in to change notification settings - Fork 0
Comparisons
Martin Jean-Christio edited this page Oct 25, 2022
·
1 revision
There are structural equality and physical equality
-
Structural
equality means that two objects have equivalent content -
Physical
/referential
equality means that the pointers for two objects are the same (Use==
to check in C++)
Content
== Structural
and Pointer
== Physical
#ifndef SAMPLE_CLASS_H
# define SAMPLE_CLASS_H
class Sample
{
public:
Sample(int v);
~Sample(void);
int getFoo(void) const;
// taking as a parameter (the address of a sample instance). Making a
// comparison between the current instance and the passed parameter instance
int compare(Sample *other) const ;
private:
int _foo;
};
#endif
Sample::Sample(int v) : _foo(v)
{
std::cout << "Constructor called" << std::endl;
return;
}
Sample::~Sample(void)
{
std::cout << "Destructor called" << std::endl;
return;
}
int Sample::getFoo(void) const
{
return this->_foo;
}
int Sample::compare(Sample *other) const
{
if (this->_foo < other->getFoo())
return (-1);
else if (this->_foo > other->getFoo())
return (1);
return (0);
}
int main(void)
{
// physically different but structurally identical instances
Sample instance1(42);
Sample instance2(42);
if (&instance1 == &instance1)
std::cout << "instance 1 and instance 1 are physically equal" << std::endl;
else
std::cout << "instance 1 and instance 1 are not physically equal" << std::endl;
if (&instance1 == &instance2)
std::cout << "instance 1 and instance 2 are physically equal" << std::endl;
else
std::cout << "instance 1 and instance 2 are not physically equal" << std::endl;
if (instance1.compare(&instance1) == 0)
std::cout << "instance 1 and instance 1 are structurally equal" << std::endl;
else
std::cout << "instance 1 and instance 1 are not structurally equal" << std::endl;
if (instance1.compare(&instance2) == 0)
std::cout << "instance 1 and instance 2 are structurally equal" << std::endl;
else
std::cout << "instance 1 and instance 2 are not structurally equal" << std::endl;
return (0);
}