лекции программирование / polevoy_cpp_2012_spring_lecture_03
.pdfКонстантные методы (пример)
class FixedArr
{
public:
//…
int size() const;
//…
};
int
FixedArr::size() const
{
//…
25.02.2012 |
cppNewb.ru |
31 |
Члены-ссылки
•сильно связанные данные (классы)
•инициализируются в списке инициализации
•блокируют создание умолчательного конструктора
25.02.2012 |
cppNewb.ru |
32 |
Ссылочные члены (поля)
class Point
{
public:
Point(Axes& axes); private:
Axes& m_axes;
///…
};
Point::Point(Axes& axes) : m_axes(axes)
///…
25.02.2012 |
cppNewb.ru |
33 |
Инвариант класса
•“ всегда” истинное логическое утверждение (члены)
•выполняется в начале и конце метода
•может нарушаться внутри метода
25.02.2012 |
cppNewb.ru |
34 |
Локальная переменная
•конструктор вызывается когда управление передается инструкции, содержащей объявление переменной
•деструктор вызывается при выходе из блока, содержащего объявление переменной
25.02.2012 |
cppNewb.ru |
35 |
Умолчательный конструктор
•конструктор без аргументов
•генерируется автоматически, если нет объявления других конструкторов
•вызывается
–создание переменной без использования инициализаторов
–создание элемента массива
25.02.2012 |
cppNewb.ru |
36 |
Копирование объектов
•инициализация через копирование
•присваивание
•передача аргументов и возврат
значений
•умолчательно является созданием точной бинарной копии
25.02.2012 |
cppNewb.ru |
37 |
Класс с указателями (пример)
class String
{
public:
String()
: m_pStr(new char[SIZE_DEF])
{}
~String()
{
delete[] m_pStr;
}
private:
char m_pStr;
};
25.02.2012 |
cppNewb.ru |
38 |
Проблемы копирования (пример)
CString str1;
///Копирующая инициализация – проблема! CString str2 = str1;
CString str3;
///Копирующее присваивание – проблема! str3 = str1;
25.02.2012 |
cppNewb.ru |
39 |
Копирование и управление ресурсами
•почленное копирование неправильно для классов, реализующих управление ресурсами (конструктор/деструктор)
•необходимо использовать пользовательский конструктор копирования и оператор присваивания
25.02.2012 |
cppNewb.ru |
40 |