Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Обяъвление использования имени идентификатора (using)
Если имя идентиф часто исп вне пределов своего пр-ва имен, то сущ возм-сть исп данного имени без указания пр-ва имен. Данная возможность реализована с исп ключ слова using. Различают using-объявл и using-директиву.
Using – объявл – делает доступным одно указанное имя внутри данного контекста using [<имя типа>][::]<имя идентиф>; либо using:: < имя ид>;
using math::pi; pi using math::sqrt; обратиться можно: pi sqrt или: math::pi math::sqrt
Пример: Void f(); { … }; Namespace A{ void g() {…} }; Namespace X{ using::f; using A::g; }; Void main() { x::f(); A::g(); } Using-об. можно использовать внутри объявления классов для доступа к членам базового класса. Пример class B{ public: void f(char) {printf (“B::f”);} void g(char) {printf (“B::g”);} };
Class D: B { Public: Using B::f; Using B::g; Void f(int) { printf (“D::f”); f(‘c’); } Void g(int) { printf (“D::g”); g(‘c’); } }; void main() { D a; a.f(1); //D::f B::f a.g(‘a’)// B::g }
using - директива. делает доступными все имена из указ пр-ва имен внутри данного контекста. Using namespace <имя>; Using namespace math; После этого объяв ко всем переменным и функциям объявл внутри конт math можно обращаться без уточнения имени(рi, sqrt). 23 С++. Шаблоны. Параметризованные функции и параметризованные классы. Шаблоны (template). Шаблон – конструкция языка, которая предназначена для реализации обобщенного программирования. Обобщенное программирование – парадигма программирования, заключающаяся в таком описании данных и алгоритмов, которые можно применять к различным типам данных, не меняя само описание. В языке C++ шаблоны реализованы с использованием ключевого слова template. Шаблон позволяет создавать параметризованные классы и параметризованные функции. Параметризованные функции. Синтаксис: template<список параметров> функция Список параметров может задаваться двумя способами: 1) сlass идентификатор [=имя типа] 2) typename идентификатор [=имя типа] При объявлении списка параметров ключевые слова class и typename эквивалентны и могут заменять друг друга. Пример объявления функции: template<typename Type> void sort(Type array[], int size) { Type n; // Type - какой-то реальный тип ………. } Type используется как имя типа.
template <typename Type, int size> Type* read() { Type* sort = new Type [size]; ……………………………… return sort; }
void main() { int a[10]; double* p; sort<int>(a,10); p=read<double,100>(); }
Реализация функции sort (функция сортировки). template<typename Type> void sort (Type array[], int size) { int c1; int c2; for(c1=0;c1<size;c1++) { for(c2=c1+1;c2<size;c2++) { if((1)array[c1]<array[c2]) { (2)Type v = array[c1]; (3) array[c1]=array[c2]; array[c2]=v; } } } }
Поскольку параметрические функции можно использовать не только для фундаментальных типов(int, char, short и т.д.), но и для производных типов данных (классы, структуры и т.д.). В этом случае следует выделить 3 важных момента: 1. Сравнение двух элементов массива. 2.Присвоение переменной значения элемента массива(в классе должен быть реализован присваивающий конструктор). 3.Присвоение элементу массива значения другого элемента массива или переменной. Смотрите внимательно за операторами!!!!!!! bool operator <(const A&); A(const A&); // конструктор копирования. A& operator = (const A&). Взаимозаменяемость параметризованных функций. 1. Параметризованную функцию можно заменить перегруженными функциями (перегрузка имен функций). void sort(int array[], int size); void sort(A array[], int size). Перегруженную функцию реализуют индивидуально для каждых типов данных. Это означает, что теряется основной принцип шаблонов, а именно, реализация обобщенного программирования. 2. Параметризованную функцию можно заменить полиморфными функциями. Для каждого типа данных потребуется реализация трех функций (1-сравнение, 2-присвоение значения переменной, 3-присвоение значения элементу массива). Параметризованные классы. Синтаксис: template<список параметров> class объявление класса; Список параметров может задаваться двумя способами: 3) сlass идентификатор [=имя типа] 4) typename идентификатор [=имя типа] Реализация стека. template <class Type> class stack { public: stack(int size); void push (Type data); Type pop (void); private: Type* mass; int index; Type* p; Type perem; };
template <class Type> stack<Type>::stack(int size) { mass=new Type[size]; index=0; }
template <class Type> void stack<Type>::push(Type data) { mass[index]=data; index++; }
template <class Type> Type stack<Type>::pop() { index--; perem=mass[index]; p=new Type[index]; for(int i=0;i<index;i++) { p[i]=mass[i]; } delete [] mass; mass=new Type[index]; for(int i=0;i<index;i++) { mass[i]=p[i]; } delete [] p; return perem; }
void main(int argc, char* argv[]) { stack<int> s(10); // создание стека s.push(10); s.push(20); printf("%d",s.pop()); //20
printf("%d",s.pop()); //10 getch(); }
|
||||||
Последнее изменение этой страницы: 2017-01-19; просмотров: 109; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 44.200.145.114 (0.022 с.) |