😲😲😲 I was able to implement the same, But code was not compilable and Interviewer was in Hurry. :) Never MIND 😲😲😲
Dequeue() which provides custom output based on type of object dequeued./*
Use OO principles to achieve same?
*/
#include<iostream>
#include<string>
using namespace std;
class Message {
string messageId;
};
class ServerResponse : public Message {
string serverId;
string serverResponse;
};
class ClientRequest : public Message {
string clientId;
int requestTime;
};
class CustomQueue {
queue q<>;
public:
// Input ServerResponse, ClientRequest
void Enqueue() {
}
void Pop() {
q.pop();
}
/*
if front=ServerResponse [messageId serverId serverResponse]
if front=ClientRequest [messageId clientId requestTime]
*/
string getFront() {
}
};
int main() {
}/*
Use OO principles to achieve same?
*/
#include<iostream>
#include<string>
#include<queue>
#include<sstream>
using namespace std;
class Message {
public:
string messageId;
virtual ~Message() {};
virtual std::string getType() const = 0;
};
class ServerResponse : public Message {
public:
string serverId;
string serverResponse;
std::string getType() const override { return "ServerResponse"; }
};
class ClientRequest : public Message {
public:
string clientId;
int requestTime;
std::string getType() const override { return "ClientRequest"; }
};
class CustomQueue {
queue<Message*> q;
public:
// Input ServerResponse, ClientRequest
void Enqueue(Message* m) {
q.push(m);
}
void Pop() {
q.pop();
}
/*
if front=ServerResponse [messageId serverId serverResponse]
if front=ClientRequest [messageId clientId requestTime]
*/
string getFront() {
stringstream ss;
Message* m = q.front();
if (m->getType() == "ServerResponse") {
ServerResponse* sr = dynamic_cast<ServerResponse*>(m);
ss << "Server:" << " " << sr->messageId << " " << sr->serverId << " " << sr->serverResponse << "\n";
} else if (m->getType() == "ClientRequest") {
ClientRequest* cr = dynamic_cast<ClientRequest*>(m);
ss << "Client:" << " " << cr->messageId << " " << cr->clientId << " " << cr->requestTime << "\n";
}
return ss.str();
}
};
int main() {
ClientRequest cr;
cr.messageId = "cm1";
cr.clientId = "cc1";
cr.requestTime = 123;
ServerResponse sr;
sr.messageId = "sm1";
sr.serverId = "ss1";
sr.serverResponse = "sr1";
// Create an instance of CustomQueue
CustomQueue customQueue;
// Enqueue the objects
customQueue.Enqueue(&cr);
customQueue.Enqueue(&sr);
cout << customQueue.getFront() << "\n";
customQueue.Pop();
cout << customQueue.getFront() << "\n";
return 0;
}