OOP_Advanced_Cpp_Exercises
OOP_Advanced_Cpp_Exercises
Pak-Wheel requested for a software to keep Client and Transaction details using Composition.
Transaction should be deleted when client is deleted.
Answer:
#include <iostream>
using namespace std;
class Transaction {
private:
string date;
string type;
float amount;
public:
Transaction(string d, string t, float a) : date(d), type(t), amount(a) {}
class Client {
private:
string name, contact, email;
Transaction transaction;
public:
Client(string n, string c, string e, string d, string t, float a)
: name(n), contact(c), email(e), transaction(d, t, a) {}
void showClient() {
cout << "Name: " << name << "\nContact: " << contact << "\nEmail: " << email << endl;
transaction.showTransaction();
}
};
Question 2
Implement Aggregation: Car has Client as owner, but client should remain even if car is deleted.
Answer:
#include <iostream>
using namespace std;
class Client {
public:
string name;
Client(string n) : name(n) {}
void showClient() { cout << "Client Name: " << name << endl; }
};
class Car {
private:
string model;
Client* owner;
public:
Car(string m, Client* c) : model(m), owner(c) {}
void showCar() {
cout << "Car Model: " << model << endl;
if (owner)
owner->showClient();
}
};
Question 3
Create Employee and Job_Detail classes using Composition. Job_Detail should be destroyed with
Employee.
Answer:
#include <iostream>
using namespace std;
class Job_Detail {
private:
string title, jobDescription;
float salary;
int id;
public:
Job_Detail(string t, float s, int i, string d) : title(t), salary(s), id(i), jobDescription(d) {}
void showJob() {
cout << "Title: " << title << "\nSalary: " << salary << "\nID: " << id << "\nDescription: " <<
jobDescription << endl;
}
};
class Employee {
private:
string name, fatherName, contact, email;
Job_Detail job;
public:
Employee(string n, string f, string c, string e, string jt, float s, int i, string jd)
: name(n), fatherName(f), contact(c), email(e), job(jt, s, i, jd) {}
void showEmployee() {
cout << "Name: " << name << "\nFather Name: " << fatherName << "\nContact: " << contact
<< "\nEmail: " << email << endl;
job.showJob();
}
};
Question 4
Create Subject and Student classes. Use Aggregation such that if Subject is deleted, Students still
exist.
Answer:
#include <iostream>
using namespace std;
class Subject {
public:
string name;
Subject(string n) : name(n) {}
void showSubject() { cout << "Subject: " << name << endl; }
};
class Student {
private:
string name;
Subject* enrolledSubject;
public:
Student(string n, Subject* s) : name(n), enrolledSubject(s) {}
void showStudent() {
cout << "Student: " << name << endl;
if (enrolledSubject)
enrolledSubject->showSubject();
}
};
Question 5
Client class with private variables Personal Email and Personal Detail. Private function prints full
info.
Answer:
#include <iostream>
using namespace std;
class Client {
private:
string name, clientId, contactAddress;
string personalEmail;
string personalDetail;
void printDetails() {
cout << "Name: " << name << "\nID: " << clientId << "\nContact: " << contactAddress
<< "\nEmail: " << personalEmail << "\nDetail: " << personalDetail << endl;
}
public:
Client(string n, string id, string contact, string email, string detail)
: name(n), clientId(id), contactAddress(contact),
personalEmail(email), personalDetail(detail) {}
void show() {
printDetails();
}
};