Понедельник, Июль 5th, 2010

Шпоры по С++

Для обращения к конкретному компоненту класса X необходимо использовать полную квалификацию: D::Y::X::f() или D::Z::X::f(). Внутри объекта класса D обращения упрощаются: Y::X::f()
Чтобы устранить дублирование объектов непрямого базового класса при множественном наследовании, этот базовый класс объявляют виртуальным. Для этого в списке базовых классов перед именем класса необходимо поместить ключевое слово virtual.

33 Локальные классы
Локальный. Локальные классы точно такие-же, как и локальные переменные, в том смысле, что они создаются и используются внутри блока кода. Как только класс внутри блока объявлен, он может быть создан сколько угодно раз внутри этого блока. Как и локальные переменные, локальные классы не могут быть объявлены как public, protected, private или static.
Вот пример кода:
//some code block …….{
class ListListener
implements ItemListener {
List list;
public ListListener(List l) {
list = l;
}

public void itemStateChanged(ItemEvent e) {
String s = l.getItemSelected();
doSomething(s);
}
}
List list1 = new List();
list list2 = new List();
list1.addItemListener(
new ListListener(list1));
list2.addItemListener(
new ListListener(list2));
}

34.Шаблоны классов
Аналогично шаблону функций определяется шаблон семейства классов template
Шаблон семейства классов определяет способ построения отдельных классов подобно тому, как класс определяет правила построения и формат отдельных объектов. В определении класса, входящего в шаблон, особую роль играет имя класса. Оно является не именем отдельного класса, а параметризированным именем семейства классов.
Следующий шаблон позволяет автоматически формировать классы векторов с указанными свойствами:
template // TYPE — параметр шаблона
class Vector
{TYPE *data; //Начало одномерного массива
int size; //Количество элементов массива
public:
Vector(int); //Конструктор класса Vector
~Vector() //Деструктор класса Vector
{delete[] data;}
TYPE& operator[] (int i) {return data[i];} //перегрузка операции []
};
template //Внешнее определение конструктора класса
Vector ::Vector(int n)
{data = new TYPE[n]; size = n;
};
Когда шаблон введен, у программиста появляется возможность определить конкретные объекты конкретных классов, каждый из которых, параметрически порожден из шаблона. Формат определения объекта одного из классов, порождаемых шаблоном классов:
имя_параметризованного_класса<фактические_параметры_шаблона>
имя_объекта(параметры_конструктора);
В нашем случае определить вектор, имеющий восемь вещественных координат типа double, можно следующим образом: Vector Z(8);
Использование имя Vector без указания фактического параметра шаблона нельзя — никакое умалчиваемое значение при этом не предусматривается.
strstrea . h — для классов istrstream, ostrstream, strstream;

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Категория: Шпоры