![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
В многофайловом проекте определение шаблона класса обычно выносится в отдельный файл. В то же время для инстанцирования компилятором конкретного экземпляра шаблона класса необходимо, чтобы определение шаблона находилось в одной единице трансляции с данным экземпляром.
В связи с этим принято размещать все определения шаблонного класса в некотором заголовочном файле, например point.h, и подключать его к нужным файлам с помощью директивы #include. Для предотвращения повторного включения этого файла, которое может иметь место в многофайловом проекте, обязательно используйте «стражи включения», реализуемые посредством директивы #ifndef
Продемонстрируем эту технику на примере нашего класса point:
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
/ / point.h
#ifndef POINT_H
#define POINT_H
template <class T> class point {
public:
point(T _х = 0, Т _у = 0): х(_х), у(_у) {}
Void Show();
private:
Т x, у;
};
template <class Т> void point<T>::Show() {
cout << " (" << x << ", " << у << ")" << endl;
}
#endif /* POINT_H */
/////////////////////////////////////////////////
// Main.cpp
#include <iostream>
#include "point.h"
Using namespace std;
int main() {
point<double> p1; //1
point<double> p2(7.32, -2.6); // 2
Pl.Show(); p2.Show();
point<int> p3(13, 15); // 3
point<short> p4(17, 21); // 4
P3.Show(); p4.Show();
Дата публикования: 2014-11-28; Прочитано: 280 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!