// Dll1.cpp: определяет экспортированные функции для приложения DLL. // #include "stdafx.h" #include "Dll1.h" #include #include using namespace std; namespace MilitaryMan { IMilitaryMan::IMilitaryMan() { total_number_military++; //cout << "IMilitaryMan::ctor()" << endl; } IMilitaryMan::~IMilitaryMan() { total_number_military--; //cout << "IMilitaryMan::dtor()" << endl; }; Soldier::Soldier() { //cout << "Soldier::ctor()" << endl; this->jobCount = 0; } Soldier::~Soldier() { //cout << "Soldier::dtor()" << endl; } void Soldier::Serve() { jobCount++; cout << "jobCount = " << jobCount << endl; } Officer::Officer(IMilitaryMan** subordinates, int size) { //cout << "Officer::ctor()" << endl; this->subordinates = subordinates; this->size = size; } Officer::~Officer() { for (int i = 0; i < size; i++) { delete subordinates[i]; } //delete[] subordinates; //cout << "Officer::dtor()" << endl; } void Officer::Serve() { //Делегирование for (int i = 0; i < size; i++) { subordinates[i]->Serve(); } } //Фабричные функции для создания новых экземпляров. extern "C" __declspec(dllexport) IMilitaryMan* __cdecl CreateSoldierObject() { return new Soldier(); } extern "C" __declspec(dllexport) IMilitaryMan* __cdecl CreateOfficerObject(IMilitaryMan** subordinates, int size) { return new Officer(subordinates, size); } }