Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 192; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.196 (0.007 с.) |