#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
class Car
{
private :
string plateNumber;
string model;
double dailyRate;
int daysRented;
public :
// ---------------- Static Members ----------------
static int activeCars;
static const int MAX_DAYS = 30 ;
// ---------------- Constructors and Destructor ----------------
// Default constructor
Car( )
{
plateNumber = "NONE" ;
model = "UNKNOWN" ;
dailyRate = 0.0 ;
daysRented = 0 ;
activeCars++ ;
}
// Parameterized constructor
Car( string plate, string mod, double rate, int days)
{
plateNumber = plate;
model = mod;
dailyRate = rate;
if ( days > MAX_DAYS)
daysRented = MAX_DAYS;
else
daysRented = days;
activeCars++ ;
}
// Destructor
~Car( )
{
cout << "Car " << plateNumber << " removed from system." << endl;
activeCars-- ;
}
// ---------------- Operator Overloading ----------------
bool operator== ( const Car& other) const
{
return plateNumber == other.plateNumber ;
}
// ---------------- Member Functions ----------------
void Print( ) const
{
cout << fixed << setprecision( 2 ) ;
cout << "Plate: " << plateNumber
<< " | Model: " << model
<< " | Rate: $" << dailyRate
<< " | Days Rented: " << daysRented << endl;
}
static int GetActiveCars( )
{
return activeCars;
}
string GetPlate( ) const
{
return plateNumber;
}
} ;
// Initialize static variable
int Car:: activeCars = 0 ;
int main( )
{
cout << "\n ********* Creating an array of Car objects *********" << endl;
// Array of 5 Car objects
Car cars[ 5 ] = {
Car( "TX123" , "Toyota Corolla" , 45.99 , 10 ) ,
Car( "AR777" , "Honda Civic" , 40.50 , 5 ) ,
Car( "OK999" , "Ford Focus" , 38.25 , 31 ) , // capped at MAX_DAYS
Car( "MO555" , "Nissan Altima" , 50.00 , 20 ) ,
Car( "TX123" , "Toyota Camry" , 55.00 , 7 ) // same plate as first
} ;
cout << "\n Active cars: " << Car:: GetActiveCars ( ) << endl;
cout << "\n ********* Displaying all cars *********" << endl;
for ( int i = 0 ; i < 5 ; i++ )
cars[ i] .Print ( ) ;
cout << "\n ********* Operator Overloading *********" << endl;
if ( cars[ 0 ] == cars[ 4 ] )
cout << "Cars " << cars[ 0 ] .GetPlate ( ) << " and " << cars[ 4 ] .GetPlate ( )
<< " are the SAME vehicle." << endl;
else
cout << "Cars have different plate numbers." << endl;
cout << "\n Active cars: " << Car:: GetActiveCars ( ) << endl;
cout << "********* End of program *********" << endl;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8aW9tYW5pcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIENhcgp7CnByaXZhdGU6CiAgICBzdHJpbmcgcGxhdGVOdW1iZXI7CiAgICBzdHJpbmcgbW9kZWw7CiAgICBkb3VibGUgZGFpbHlSYXRlOwogICAgaW50IGRheXNSZW50ZWQ7CgpwdWJsaWM6CiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tIFN0YXRpYyBNZW1iZXJzIC0tLS0tLS0tLS0tLS0tLS0KICAgIHN0YXRpYyBpbnQgYWN0aXZlQ2FyczsKICAgIHN0YXRpYyBjb25zdCBpbnQgTUFYX0RBWVMgPSAzMDsKCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tIENvbnN0cnVjdG9ycyBhbmQgRGVzdHJ1Y3RvciAtLS0tLS0tLS0tLS0tLS0tCgogICAgLy8gRGVmYXVsdCBjb25zdHJ1Y3RvcgogICAgQ2FyKCkKICAgIHsKICAgICAgICBwbGF0ZU51bWJlciA9ICJOT05FIjsKICAgICAgICBtb2RlbCA9ICJVTktOT1dOIjsKICAgICAgICBkYWlseVJhdGUgPSAwLjA7CiAgICAgICAgZGF5c1JlbnRlZCA9IDA7CgogICAgICAgIGFjdGl2ZUNhcnMrKzsKICAgIH0KCiAgICAvLyBQYXJhbWV0ZXJpemVkIGNvbnN0cnVjdG9yCiAgICBDYXIoc3RyaW5nIHBsYXRlLCBzdHJpbmcgbW9kLCBkb3VibGUgcmF0ZSwgaW50IGRheXMpCiAgICB7CiAgICAgICAgcGxhdGVOdW1iZXIgPSBwbGF0ZTsKICAgICAgICBtb2RlbCA9IG1vZDsKICAgICAgICBkYWlseVJhdGUgPSByYXRlOwoKICAgICAgICBpZiAoZGF5cyA+IE1BWF9EQVlTKQogICAgICAgICAgICBkYXlzUmVudGVkID0gTUFYX0RBWVM7CiAgICAgICAgZWxzZQogICAgICAgICAgICBkYXlzUmVudGVkID0gZGF5czsKCiAgICAgICAgYWN0aXZlQ2FycysrOwogICAgfQoKICAgIC8vIERlc3RydWN0b3IKICAgIH5DYXIoKQogICAgewogICAgICAgIGNvdXQgPDwgIkNhciAiIDw8IHBsYXRlTnVtYmVyIDw8ICIgcmVtb3ZlZCBmcm9tIHN5c3RlbS4iIDw8IGVuZGw7CiAgICAgICAgYWN0aXZlQ2Fycy0tOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0gT3BlcmF0b3IgT3ZlcmxvYWRpbmcgLS0tLS0tLS0tLS0tLS0tLQogICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhciYgb3RoZXIpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIHBsYXRlTnVtYmVyID09IG90aGVyLnBsYXRlTnVtYmVyOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0gTWVtYmVyIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tCiAgICB2b2lkIFByaW50KCkgY29uc3QKICAgIHsKICAgICAgICBjb3V0IDw8IGZpeGVkIDw8IHNldHByZWNpc2lvbigyKTsKICAgICAgICBjb3V0IDw8ICJQbGF0ZTogIiA8PCBwbGF0ZU51bWJlcgogICAgICAgICAgICAgPDwgIiB8IE1vZGVsOiAiIDw8IG1vZGVsCiAgICAgICAgICAgICA8PCAiIHwgUmF0ZTogJCIgPDwgZGFpbHlSYXRlCiAgICAgICAgICAgICA8PCAiIHwgRGF5cyBSZW50ZWQ6ICIgPDwgZGF5c1JlbnRlZCA8PCBlbmRsOwogICAgfQoKICAgIHN0YXRpYyBpbnQgR2V0QWN0aXZlQ2FycygpCiAgICB7CiAgICAgICAgcmV0dXJuIGFjdGl2ZUNhcnM7CiAgICB9CgogICAgc3RyaW5nIEdldFBsYXRlKCkgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gcGxhdGVOdW1iZXI7CiAgICB9Cn07CgovLyBJbml0aWFsaXplIHN0YXRpYyB2YXJpYWJsZQppbnQgQ2FyOjphY3RpdmVDYXJzID0gMDsKCgppbnQgbWFpbigpCnsKICAgIGNvdXQgPDwgIlxuKioqKioqKioqIENyZWF0aW5nIGFuIGFycmF5IG9mIENhciBvYmplY3RzICoqKioqKioqKiIgPDwgZW5kbDsKCiAgICAvLyBBcnJheSBvZiA1IENhciBvYmplY3RzCiAgICBDYXIgY2Fyc1s1XSA9IHsKICAgICAgICBDYXIoIlRYMTIzIiwgIlRveW90YSBDb3JvbGxhIiwgNDUuOTksIDEwKSwKICAgICAgICBDYXIoIkFSNzc3IiwgIkhvbmRhIENpdmljIiwgNDAuNTAsIDUpLAogICAgICAgIENhcigiT0s5OTkiLCAiRm9yZCBGb2N1cyIsIDM4LjI1LCAzMSksIC8vIGNhcHBlZCBhdCBNQVhfREFZUwogICAgICAgIENhcigiTU81NTUiLCAiTmlzc2FuIEFsdGltYSIsIDUwLjAwLCAyMCksCiAgICAgICAgQ2FyKCJUWDEyMyIsICJUb3lvdGEgQ2FtcnkiLCA1NS4wMCwgNykgLy8gc2FtZSBwbGF0ZSBhcyBmaXJzdAogICAgfTsKCiAgICBjb3V0IDw8ICJcbkFjdGl2ZSBjYXJzOiAiIDw8IENhcjo6R2V0QWN0aXZlQ2FycygpIDw8IGVuZGw7CgogICAgY291dCA8PCAiXG4qKioqKioqKiogRGlzcGxheWluZyBhbGwgY2FycyAqKioqKioqKioiIDw8IGVuZGw7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykKICAgICAgICBjYXJzW2ldLlByaW50KCk7CgogICAgY291dCA8PCAiXG4qKioqKioqKiogT3BlcmF0b3IgT3ZlcmxvYWRpbmcgKioqKioqKioqIiA8PCBlbmRsOwogICAgaWYgKGNhcnNbMF0gPT0gY2Fyc1s0XSkKICAgICAgICBjb3V0IDw8ICJDYXJzICIgPDwgY2Fyc1swXS5HZXRQbGF0ZSgpIDw8ICIgYW5kICIgPDwgY2Fyc1s0XS5HZXRQbGF0ZSgpCiAgICAgICAgICAgICA8PCAiIGFyZSB0aGUgU0FNRSB2ZWhpY2xlLiIgPDwgZW5kbDsKICAgIGVsc2UKICAgICAgICBjb3V0IDw8ICJDYXJzIGhhdmUgZGlmZmVyZW50IHBsYXRlIG51bWJlcnMuIiA8PCBlbmRsOwoKICAgIGNvdXQgPDwgIlxuQWN0aXZlIGNhcnM6ICIgPDwgQ2FyOjpHZXRBY3RpdmVDYXJzKCkgPDwgZW5kbDsKCiAgICBjb3V0IDw8ICIqKioqKioqKiogRW5kIG9mIHByb2dyYW0gKioqKioqKioqIiA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9CgoKICAgIA==