I decided to solve the Box It! challenge in Hackerrank to improve my C++ knowledge as I'm still new to the language.
Design a class named Box whose dimensions are integers and private to the class. The dimensions are labeled: length \$l\$ , breadth \$b\$ , and height \$h\$.
The default constructor of the class should initialise \$l\$ ,\$b\$ ,\$h\$ and to length, breadth and height .
The parameterized constructor
Box(int length, int breadth, int height)
should initialize Box's \$l\$ , \$b\$ and \$h\$ to length, breadth and height.The copy constructor
Box(Box B)
should set \$l\$ , \$b\$ and \$h\$ to \$B\$ 's \$l\$ , \$b\$ and \$h\$ respectively.Apart from the above, the class should have \$4\$ functions:
int getLength()
- Return box's lengthint getBreadth()
- Return box's breadthint getHeight()
- Return box's heightlong long CalculateVolume()
- Return the volume of the boxOverload the operator for the class Box. Box \$A \leq \$ Box \$B\$ if:
- \$ A.l \leq B.l\$
- \$ A.b \leq B.b\$ and \$ A.l == B.l\$
- \$ A.h \leq B.h\$ and \$ A.b == B.b\$ and \$ A.l == B.l\$
Overload operator \$<<\$ for the class
Box()
.If \$B\$ is an object of class Box:
\$cout << B\$ should print \$ B.l, B.b \$ and \$B.h\$ on a single line separated by spaces.
Constraints
\$0 \leq l,b,h \leq 10^5\$ Two boxes being compared using the \$<\$ operator will not have all three dimensions equal.
Here is my code
#include<bits/stdc++.h>
using namespace std;
class Box{
int length, breadth, height;
public:
Box (){
length =0;
breadth = 0;
height =0;
}
Box (int l, int b, int h)
{
length =l;
breadth = b;
height = h;
}
Box(const Box& b){
length = b.length;
breadth = b.breadth;
height = b.height;
}
int getLength(){
return length;
}
int getBreadth (){
return breadth;
}
int getHeight(){
return height;
}
long long CalculateVolume(){
return (long long) length * breadth * height;
}
bool operator<(Box& b){
if(this->length <= b.length || this->breadth <= b.breadth && this->length == b.length ||
this->height <= b.height && this->length == b.length && this->breadth == b.breadth)
{
return true;
}
return false;
}
friend ostream& operator<<(ostream &out, const Box &B);
};
ostream& operator<<(ostream &out, const Box &B){
out<< B.length<<" "<< B.breadth<< " " << B.height;
return out;
}
void check2()
{
int n;
cin>>n;
Box temp;
for(int i=0;i<n;i++)
{
int type;
cin>>type;
if(type ==1)
{
cout<<temp<<endl;
}
if(type == 2)
{
int l,b,h;
cin>>l>>b>>h;
Box NewBox(l,b,h);
temp=NewBox;
cout<<temp<<endl;
}
if(type==3)
{
int l,b,h;
cin>>l>>b>>h;
Box NewBox(l,b,h);
if(NewBox<temp)
{
cout<<"Lesser\n";
}
else
{
cout<<"Greater\n";
}
}
if(type==4)
{
cout<<temp.CalculateVolume()<<endl;
}
if(type==5)
{
Box NewBox(temp);
cout<<NewBox<<endl;
}
}
}
int main()
{
check2();
}
Final thoughts
I now I shouldn't be using this line of code
using namespace std;
as recommended in other reviews but Hackerrank had this pre-defined and I couldn't change it. TheCheck2()
andmain()
were also predefined as well.Was the use of
friend
method an overkill?- Did I override the operators
<<
and<
correctly? - How can I improve this code?