Обяъвление использования имени идентификатора (using) 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Обяъвление использования имени идентификатора (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 с.)