Your question is OOP, Projects, and a Given Program. Take a moment with it on the right.
Talk me through your thinking if you like. When you're confident, submit your answer and I'll grade it like a real screen (7/10 or better passes).
Thales' radar tracking software keeps a running list of contacts and scores each one's threat level. A reviewer flagged this TrackManager code during a design review as having real bugs baked into how it uses inheritance, not just style issues.
#include <vector>
#include <iostream>
using namespace std;
class Contact {
public:
Contact(int id) : trackId(id) {}
~Contact() {}
virtual double threatScore() { return 0.0; }
int trackId;
};
class HostileContact : public Contact {
public:
HostileContact(int id, double* sensorData) : Contact(id), data(sensorData) {}
~HostileContact() { delete[] data; }
double threatScore() override { return data[0] * 2.5; }
double* data;
};
class TrackManager {
public:
vector<Contact> tracks;
void addContact(Contact c) {
tracks.push_back(c);
}
double totalThreat() {
double total = 0;
for (auto& t : tracks) {
total += t.threatScore();
}
return total;
}
};
int main() {
TrackManager mgr;
double* sensor = new double[1]{40.0};
HostileContact h(1, sensor);
mgr.addContact(h);
cout << "total threat: " << mgr.totalThreat() << endl;
Contact* basePtr = new HostileContact(2, new double[1]{10.0});
delete basePtr;
return 0;
}
Describe how you would approach this OOP problem: what's actually wrong with how this program uses inheritance, and what would you change in the given program to fix it?