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
friendmethod an overkill?- Did I override the operators
<<and<correctly? - How can I improve this code?