- •1. Указатели, ссылки, квалификатор const.
- •2. Контейнерные типы данных (vector, list, map, set).
- •3. Итераторы.
- •4. Прототип функции. Параметры функции (указатели, ссылки, массивы, по
- •5. Области видимости и пространства имен.
- •6. Перегрузка функций. Разрешение перегрузки.
- •7. Шаблоны функций, конкретизация.
- •8. Обработка исключений. За и против.
- •9. Обобщенные алгоритмы.
- •10. Классы: инкапсуляция данных, уровни доступа к членам, неявный указатель
- •11. Создание и уничтожение объектов класса. Статические члены класса. Открытые и закрытые конструкторы.
- •12. Перегруженные операторы и преобразования, определенные пользователем.
- •13. Шаблоны классов.
- •14. Открытое и закрытое наследование.
- •15. Полиморфизм.
10. Классы: инкапсуляция данных, уровни доступа к членам, неявный указатель
this. Друзья класса.
Классах служит чтобы определять пользователям собственные типы данных. Определение класса состоит из двух частей: заголовка, включающего ключевое слово class, за которым следует имя класса, и тела, заключенного в фигурные скобки.
class First {
int memi;
double memd;
};
Инкапсуляция – принцип ООП, который гласит о том, что данные и функции которые выполян. над этими данными, должны быть в одном месте (в классе).
Свойства класса – любая переменная класса.
три уровня доступа: private, protected и public. Известно, что private можно опускать при описании классов, private ставится по умолчанию.
Ни один из наследников не сможет доступиться к private-данным. К public могут иметь доступ все, кто видит. protected – доступ классам наследникам.
class Screen {
public:
// функции-члены
private:
…
};
this - указатель на текущий объект. Указатель this хранит адрес объекта, для которого была вызвана функция-член.
class T{
int x;
void foo() {
this->x = 5; // м.ж. использ. свойство либо через this, либо по имени.
x = 6; }
void foo() const{
this->x = 7; // будет ошибка }
void foo ( int x ){
this->x = x; // когда имена совпадают имена приним. переменой с именем свойсва класса }
T& operator= ( const T& b ){
x = b.x;
return *this; // исп. для возвращ. текущего объекта из метода (a+b+c) }
void bar ( const T& b ){
*this = b; // исп. перегруж. метода опертаора=
this->operator= ( b ); }
};
Друзья класса не являются членами класса. Они должны определяться вне класса, для которого они объявляются друзьями, а об особых отношениях между ними и данным классом свидетельствует лишь специальное объявление(!) со спецификатором объявления friend. Объявления дружественного класса означает, что в дружественном классе доступны все компоненты объявляемого класса.
class Base{
friend class X;
};
class X {…}
11. Создание и уничтожение объектов класса. Статические члены класса. Открытые и закрытые конструкторы.
Конструктор представляет собой метод класса, который имеет такое же имя, как и класс. Если ваша программа определяет конструктор, C++ будет автоматически вызывать его каждый раз, когда вы создаете объект. Конструкторы могут быть по умолчанию(конструктор без параметров), инициализирующий(принимает некоторые параметры указанные пользователем), копирующий (принимает объект такого же класса), автоматически применяется к каждому объекту перед его первым использованием.
Конструктор по умолчанию – для которого не требуется задавать значения. Имя любого конструктора совпадает с именем класса, и он не должен иметь тип возвращаемого значения. Определять объект класса, не указывая списка фактических аргументов, можно в том случае, если в нем либо объявлен конструктор по умолчанию, либо вообще нет объявлений конструкторов. Если в классе объявлен конструктор, не разрешается определять объект класса, не вызывая ни одного из них. Если исключить конструктор по умолчанию, то возникнут проблемы, ситуация имеет место при выделении динамического массива объектов класса.
Деструктор автоматически применяется к каждому объекту класса по окончании его использования и предназначена для освобождения ресурсов. Деструктор – нужен только тогда, когда объекту при создании или во время жизни выделялись какие-либо ресурсы, которые нужно вернуть: память, критические ресурсы. Он может например освобождать ресурсы. Статические члены класса – такие которые создаются в ед. экземпляре для всех объектов класса. Пример: счетчик копий – static int count;
class counter { static int count; /одна общ. для всех public: void setcount(int i) {count = i;}; void showcount () {cout << count << " "; } }; int counter::count; // определение count в обл. видим. класса int main() { counter a, b; a.showcount (); // выводит 0 b.showcount (); // выводит 0 a.setcount (10); // установка статического count в 10 a.showcount (); // выводит 10 b.showcount (); // также выводит 10 return 0; }
Статические методы класса – могут исп. только статич. св-ва класса, т.к. для них не доступен указатель на тек. объект (*this). Например, если имеется два объекта класса, содержащие статическую функцию f(), и если f() пытается получить доступ к нестатической переменной var, определенной этим классом, то как можно определить, какую именно копию var следует использовать? Компилятор не может решить такую проблему. Ошибка.
Открытй констуктор – обычный. Закрытый конструктор - он наход. не в publice, а в protected, т.е. создать объект этого класса могут только наследники и друзья.
