Assignment 1 2026
Unique number:
Due Date: 2026
Detailed solutions, explanations, workings
and references.
+27 81 278 3372
, QUESTION 1
#include <QCoreApplication>
#include <QDate>
#include <QList>
#include <QTextStream>
// ---------------------------
// Vehicle (base class)
// ---------------------------
class Vehicle : public QObject
{
public:
explicit Vehicle(QObject* parent = nullptr)
: QObject(parent)
, m_model(defaultModel())
, m_year(defaultYear())
{}
Vehicle(const QString& model, int year, QObject* parent = nullptr)
: QObject(parent)
{
setModel(model);
setYear(year);
}
virtual ~Vehicle() = default;
// Getters
QString model() const { return m_model; }
int year() const { return m_year; }
// Setters (with validation)
void setModel(const QString& model)
{
// Default if blank/whitespace
const QString trimmed = model.trimmed();
m_model = trimmed.isEmpty() ? defaultModel() : trimmed;
}
void setYear(int year)
{
m_year = isReasonableYear(year) ? year : defaultYear();
}
// Polymorphic detail output
virtual QString details() const
{
return QString("Type=Vehicle, Model=%1,
Year=%2").arg(m_model).arg(m_year);
}
protected:
static QString defaultModel() { return "Unknown Model"; }
static int defaultYear()
{
// Use current year as a sensible default
return QDate::currentDate().year();
}
Varsity Cube 2026 +27 81 278 3372
, static bool isReasonableYear(int y)
{
// First practical car year ~1886; allow up to next year for new
models
const int current = QDate::currentDate().year();
return (y >= 1886 && y <= current + 1);
}
private:
QString m_model;
int m_year;
};
// ---------------------------
// PassengerVehicle
// ---------------------------
class PassengerVehicle : public Vehicle
{
public:
explicit PassengerVehicle(QObject* parent = nullptr)
: Vehicle(parent)
, m_passengers(defaultPassengers())
{}
PassengerVehicle(const QString& model, int year, int passengers,
QObject* parent = nullptr)
: Vehicle(model, year, parent)
{
setPassengerCount(passengers);
}
int passengerCount() const { return m_passengers; }
void setPassengerCount(int count)
{
// Reasonable passenger count for typical passenger vehicles
m_passengers = (count >= 1 && count <= 15) ? count :
defaultPassengers();
}
QString details() const override
{
return QString("Type=PassengerVehicle, Model=%1, Year=%2,
Passengers=%3")
.arg(model())
.arg(year())
.arg(m_passengers);
}
private:
static int defaultPassengers() { return 4; }
int m_passengers;
};
// ---------------------------
// TransportVehicle
// ---------------------------
class TransportVehicle : public Vehicle
{
public:
Varsity Cube 2026 +27 81 278 3372