ООП и C++
Добавлено: 05 сен 2011, 06:58
Классический полиморфный контейнер рассматривается на лекциях по ООП:
Имеется ещё около десятка способов, отличных от приведенного, чтобы создать полиморфный контейнер.
Кто-нибудь владеет этими способами? Призовые 5 баллов к рейтингу студента за каждый новый способ.
- Код: выделить все
// Полиморфный контейнер. Способ №1 (от Страуструпа).
#include <list>
#include <iostream>
#include <stdio.h>
using namespace std;
class Polymorph { // абстрактный класс
public:
virtual Polymorph& get()=0; // чистая виртуальная функция
};
class Int:public Polymorph { // класс целых чисел, потомок Polymorph
int X;
public:
Int(int x=0) { X=x; }
Int& get() { cout << "Object Int: " << X << endl; return *this; }
};
class Str:public Polymorph { // класс строк, потомок Polymorph
char* S;
public:
Str(char* s="xyz") { S=new char[strlen(s)+1]; strcpy(S,s); }
Str& get() { cout << "Object Str: " << S << endl; return *this; }
};
class Point:public Polymorph { // класс точек на плоскости, потомок Polymorph
int X, Y;
public:
Point(int x=0, int y=0) { X=x; Y=y; }
Point& get() { cout << "Object Point: X= " << X << ", Y= " << Y<< endl; return *this; }
};
int main() {
Int n; Str m; Point k; // три объекта: "целые числа", "строки", "точки на плоскости"
list<Polymorph*> c; // контейнер указателей на объекты класса Polymorph
c.push_front(&n);
c.push_front(&m);
c.push_front(&k);
for(list<Polymorph*>::iterator p=c.begin();p!=c.end(); p++) (*p)->get();
system("pause"); // с помощью итератора смотрим, как работает полиморфный контейнер
}
Имеется ещё около десятка способов, отличных от приведенного, чтобы создать полиморфный контейнер.
Кто-нибудь владеет этими способами? Призовые 5 баллов к рейтингу студента за каждый новый способ.