C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 110 - Шаблоны и универсальные классы / MSDN rus / Visual C++

Шаг 110 - Шаблоны и универсальные классы

Помните в DAO мы связывали диалог с классом набором записей с помощью функций?

SetRecordset(m_pSet);
m_Book.SetRecordset(&cbookset);
m_Piple.SetRecordset(&cpipleset); 

В позапрошлом шаге мы связывали классы для работы так:

CMFCArray mfcArray;
CStlArray stlArray;
CWork cw1(&mfcArray);
CWork cw2(&stlArray);

С помощью шаблонов тоже можно связать классы. Давайте посмотрим, как это будет выглядеть на основе шаблонов.

#include "stdafx.h"
#include "afxwin.h"
#include "iostream.h"

class CVirtualBase
{
public:
	virtual CString GetClassName();		// получение имени класса
};

CString CVirtualBase::GetClassName()
{return "CVirtualBase";}

class CAdo : public CVirtualBase
{
public:
	CString GetClassName();
};

CString CAdo::GetClassName()
{return "CAdo";}

class CDao : public CVirtualBase
{
public:
	CString GetClassName();
};

CString CDao::GetClassName()
{return "CDao";}

class COdbc : public CVirtualBase
{
public:
	CString GetClassName();
};

CString COdbc::GetClassName()
{return "COdbc";}


template <class CVirtualBase > class CBaseClass 
{
public:
	CString GetClassName();
private:
	CVirtualBase cbaseclass;

};

template<class CVirtualBase>
CString CBaseClass<CVirtualBase>::GetClassName()
{return cbaseclass.GetClassName();}

void main()
{
	CBaseClass <CDao> cd;
	cout << cd.GetClassName() << endl; 
	CBaseClass <CAdo> ca;
	cout << ca.GetClassName() << endl; 
	CBaseClass <COdbc> co;
	cout << co.GetClassName() << endl; 
}

Однако у каждого способа есть достоинства и недостатки.


| |
Автор Каев Артем.
[AD]