Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Явные объявления конструкторов




Пространство имен

Шаблоны

Дружественные функции

Дружественные фукции имеют доступ ко всем защищенным и при­ват­ным членам данных внешних классов. Объявление их имеет вид:

FriendreturnType <имя функции> ( <параметры> ). Оператор вызова функ­ции имеет вид: <имя функции> (& <имя экземпляра класса с функцией> ).

Шаблоны позволяют создавать семейство функций или классов:

Template< список шаблонных типов > { <объявление> };

Шаблон функций задает образец объявлений перегруженных фун­кций (типы аргу­ментов и результатов работы функции могут меняться при ее различных вызовах) (п. 6.2.7). Фактичес­кие типы должны быть известны во время компиляции.

Пример шаблона функцииmaxim (нахождение наиболь­ше­го числа из двух чисел, все аргументы и результат имеют пе­ре­менный тип T):

template <class T> T maxim (T x,T y) // шаблон функции maxim

{ return (x > y)? x: y;} // тело функции maxim

int main(int argc, char **argv) // основная функция проверки шаблона

{ int i=2; int j=maxim(i,0); // аргументы функции maxim типа int

float a=3.2,b=8.6;float m=maxim(a,b); //аргументы функции maxim типа float

cout << j << endl; cout << m <<endl; getch(); return 0; // вывод результатов

} // конец функции

Шаблон классов задает образец определений семейства классов.

Пример шаблона Vector ‑ генератор классов одномерных массивов.

template <class T> class Vector;

Механизм пространства внешних (глобальных) имен позволяет раз­бить приложе­ние на отдельные пространства, в каждом из которых можно определить свои глобальные иден­тификато­ры. Последние не зависят от других прост­ранств. Каждое пространство начинается со строки:

namespace <идентификатор подсистемы> { [<объявления>] }.

Существуют три способа доступа к элементам подсистем:

1. Явная в виде <имя подсистемы> :: <переменная, функция> (first::nds).

2. Доступ ко всем элементам в виде using namespace:: <имя подсистемы> (using namespace:: first).

3. Объявление нового идентификатора в локальном пространстве имен в ви­де: using:: <новое имя> (using:: nds;).

Пример:

namespace first { int i=10, j=11; } // объявление пространства first

int main(int argc, char **argv) // основная функция тестирования

{ cout << first::i << endl; // вывод переменной i=10 из пространства first

using namespace:: first; // доступ ко всем переменным пространства first

cout << j << endl; // вывод переменной j=11 из пространства first

getch(); return 0; // задержка и выход из функции

} // конец тела основной функции

Если при объявлении конструктора указать слово explicit, то он тре­бу­ет, чтобы значения в операторах присваивания были пре­об­разованы к тому классовому типу, объектам которого эти значения присваиваются.

Пример объявления класс X и его двух конструкторов:

class X {public: explicit X (int); explicit X (const char*, int=0);}; // класс X

void F(X prm) { X a=X(1); X b=X(«строка»,0); a=X(2); } // функция F




Поделиться с друзьями:


Дата добавления: 2014-12-08; Просмотров: 426; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.