I am having trouble understanding a functon that uses a ->this pointer. I also know that the function may work without using a ->this pointer, but the point is that I don't understand how the compiler understands it, or how it actually works, after reading it.
Here's the code:
Code:
#include <iostream>
using std::cout;
using std::endl;
class CBox // Class definition at global scope
{
public:
CBox(double lv = 1.0, double bv = 1.0, double hv = 1.0) // Constructor definition
{
cout << endl << "Constructor called.";
m_Length = lv; // Set values of
m_Width = bv; // data members
m_Height = hv;
}
double Volume() // Function to calculate the volume of a box
{
return m_Length*m_Width*m_Height;
}
int Compare(CBox xBox) // Function to compare two boxes which returns true (1) if the first is greater than the second, and false (0) otherwise
{
return this->Volume() > xBox.Volume();
}
private:
double m_Length; // Length of a box in inches
double m_Width; // Width of a box in inches
double m_Height; // Height of a box in inches
};
int main()
{
CBox match(2.2, 1.1, 0.5); // Declare match box
CBox cigar(8.0, 5.0,1.0); // Declare cigar box
if(cigar.Compare(match))
cout << endl << "match is smaller than cigar";
else
cout << endl << "match is equal to or larger than cigar";
cout << endl;
return 0;
}
The compare() function that was defined in the class definition returns 1 if the statement -this->Volume() > xBox.Volume()- is true, and 0 if not.
BUT WHY?? shouldn't it need an if (xxx.volume() > xxx.volume())
return 1;
else
return 0;
??
It looks a little "magical" to me. Any help would be really appreciated. Thanks!