HackerRank
Prepare > C++ > Classes > Box It!
Design a class named Box whose dimensions are integers and private to the class. The dimensions are labelled: length l, breadth b, and height h.
The default constructor of the class should initialize l, b, and h to 0.
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 length
int getBreadth() - Return box's breadth
int getHeight() - Return box's height
long long CalculateVolume() - Return the volume of the box
Overload the operator for the class Box. Box A < Box B if:
cout << B should print B.l, B.b and B.h on a single line separated by spaces.
For example,
Box b1; // Should set b1.l = b1.b = b1.h = 0;
Box b2(2, 3, 4); // Should set b1.l = 2, b1.b = 3, b1.h = 4;
b2.getLength(); // Should return 2
b2.getBreadth(); // Should return 3
b2.getheight(); // Should return 4
b2.CalculateVolume(); // Should return 24
bool x = (b1 < b2); // Should return true based on the conditions given
cout<<b2; // Should print 2 3 4 in order.
class Box {
int l, b, h;
public:
Box() : l(0), b(0), h(0) {};
Box(int length, int breadth, int height) : l(length), b(breadth), h(height) {};
Box(Box& B) {
l = B.getLength();
b = B.getBreadth();
h = B.getHeight();
};
int getLength() {
return l;
}
int getBreadth() {
return b;
}
int getHeight() {
return h;
}
long long CalculateVolume() {
return (long long) l * b * h;
}
bool operator<(Box& b) {
if (l < b.getLength()) {
return true;
}
else if (this->b < b.getBreadth() && l == b.getLength()) {
return true;
}
else if (h < b.getHeight() && this->b == b.getBreadth() && l == b.getLength()) {
return true;
}
else {
return false;
}
}
};
ostream& operator<<(ostream& out, Box& B) {
out << B.getLength() << " " << B.getBreadth() << " " << B.getHeight();
return out;
}
#include<bits/stdc++.h>
using namespace std;
class Box {
int l, b, h;
public:
Box() : l(0), b(0), h(0) {};
Box(int length, int breadth, int height) : l(length), b(breadth), h(height) {};
Box(Box& B) {
l = B.getLength();
b = B.getBreadth();
h = B.getHeight();
};
int getLength() {
return l;
}
int getBreadth() {
return b;
}
int getHeight() {
return h;
}
long long CalculateVolume() {
return (long long) l * b * h;
}
bool operator<(Box& b) {
if (l < b.getLength()) {
return true;
}
else if (this->b < b.getBreadth() && l == b.getLength()) {
return true;
}
else if (h < b.getHeight() && this->b == b.getBreadth() && l == b.getLength()) {
return true;
}
else {
return false;
}
}
};
ostream& operator<<(ostream& out, Box& B) {
out << B.getLength() << " " << B.getBreadth() << " " << B.getHeight();
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();
}
5
2 3 4 5
4
5
4
2 4 6 7
3 4 5
60
3 4 5
60
4 6 7
class 생성 기억하기!
operator overloading 기억하기!
overloading은 이름은 같지만 type 또는 parameter 취급이 다른 함수를 정의하는 것, overriding은 자식이 부모의 함수 작동 방식을 재정의하는 것이다. overriding된 함수는 자식 클래스 내에서 동일 이름을 사용하였을 때 가장 우선적으로 호출된다.