#include <assert.h>
#include <iostream>
#include <string>
using std::cout;
using std::endl;
using std::string;
class Subject {
public:
virtual string Name() = 0;
};
class Calculus : public Subject {
public:
string Name() { return "Calculus"; }
};
class English : public Subject {
public:
string Name() { return "English"; }
};
class Algebra : public Subject {
public:
string Name() { return "Algebra"; }
};
class Cpp : public Subject {
public:
string Name() { return "C++ Language"; }
};
class Physics : public Subject {
public:
string Name() { return "Physics"; }
};
void fillObjects(Subject *o[]) {
o[0] = new Calculus;
o[1] = new English;
o[2] = new Algebra;
o[3] = new Cpp;
o[4] = new Physics;
}
int main() {
Subject *o[5];
fillObjects(o);
assert(o[0]->Name() == "Calculus");
assert(o[1]->Name() == "English");
assert(o[2]->Name() == "Algebra");
assert(o[3]->Name() == "C++ Language");
assert(o[4]->Name() == "Physics");
cout << "pass!!!" << endl;
for (int i = 0; i < 5; i++)
delete o[i];
return 0;
}