ݺߣ

ݺߣShare a Scribd company logo
Программирование на языке C++
Лекция 3
Модификаторы доступа
Александр Смаль
1/7
Модификаторы доступа
Модификаторы доступа позволяют ограничивать доступ к
методам и полям класса.
struct IntArray {
explicit IntArray(size_t size)
: size_(size), data_(new int[size ])
{}
~IntArray () { delete [] data_; }
int & get(size_t i) { return data_[i]; }
size_t size () { return size_; }
private:
size_t size_;
int * data_;
};
2/7
Ключевое слово class
Ключевое слово struct можно заменить на class, тогда поля
и методы по умолчанию будут private.
class IntArray {
public:
explicit IntArray(size_t size)
: size_(size), data_(new int[size ])
{}
~IntArray () { delete [] data_; }
int & get(size_t i) { return data_[i]; }
size_t size () { return size_; }
private:
size_t size_;
int * data_;
};
3/7
Инварианты класса
∙ Выделение публичного интерфейса позволяет
поддерживать инварианты класса
(сохранять данные объекта в согласованном состоянии).
struct IntArray {
...
size_t size_;
int * data_; // массив размера size_
};
∙ Для сохранения инвариантов класса:
1. все поля должны быть закрытыми,
2. публичные методы должны сохранять инварианты класса.
∙ Закрытие полей класса позволяет абстрагироваться от
способа хранения данных объекта.
4/7
Публичный интерфейс
struct IntArray {
...
void resize(size_t nsize) {
int * ndata = new int[nsize ];
size_t n = nsize > size_ ? size_ : nsize;
for (size_t i = 0; i != n; ++i)
ndata[i] = data_[i];
delete [] data_;
data_ = ndata;
size_ = nsize;
}
private:
size_t size_;
int * data_;
};
5/7
Абстракция
struct IntArray {
public:
explicit IntArray(size_t size)
: size_(size), data_(new int[size ])
{}
~IntArray () { delete [] data_; }
int & get(size_t i) { return data_[i]; }
size_t size () { return size_; }
private:
size_t size_;
int * data_;
};
6/7
Абстракция
struct IntArray {
public:
explicit IntArray(size_t size)
: data_(new int[size + 1])
{
data_ [0] = size;
}
~IntArray () { delete [] data_; }
int & get(size_t i) { return data_[i + 1]; }
size_t size () { return data_ [0]; }
private:
int * data_;
};
7/7

More Related Content

3.5 Модификаторы доступа

  • 1. Программирование на языке C++ Лекция 3 Модификаторы доступа Александр Смаль 1/7
  • 2. Модификаторы доступа Модификаторы доступа позволяют ограничивать доступ к методам и полям класса. struct IntArray { explicit IntArray(size_t size) : size_(size), data_(new int[size ]) {} ~IntArray () { delete [] data_; } int & get(size_t i) { return data_[i]; } size_t size () { return size_; } private: size_t size_; int * data_; }; 2/7
  • 3. Ключевое слово class Ключевое слово struct можно заменить на class, тогда поля и методы по умолчанию будут private. class IntArray { public: explicit IntArray(size_t size) : size_(size), data_(new int[size ]) {} ~IntArray () { delete [] data_; } int & get(size_t i) { return data_[i]; } size_t size () { return size_; } private: size_t size_; int * data_; }; 3/7
  • 4. Инварианты класса ∙ Выделение публичного интерфейса позволяет поддерживать инварианты класса (сохранять данные объекта в согласованном состоянии). struct IntArray { ... size_t size_; int * data_; // массив размера size_ }; ∙ Для сохранения инвариантов класса: 1. все поля должны быть закрытыми, 2. публичные методы должны сохранять инварианты класса. ∙ Закрытие полей класса позволяет абстрагироваться от способа хранения данных объекта. 4/7
  • 5. Публичный интерфейс struct IntArray { ... void resize(size_t nsize) { int * ndata = new int[nsize ]; size_t n = nsize > size_ ? size_ : nsize; for (size_t i = 0; i != n; ++i) ndata[i] = data_[i]; delete [] data_; data_ = ndata; size_ = nsize; } private: size_t size_; int * data_; }; 5/7
  • 6. Абстракция struct IntArray { public: explicit IntArray(size_t size) : size_(size), data_(new int[size ]) {} ~IntArray () { delete [] data_; } int & get(size_t i) { return data_[i]; } size_t size () { return size_; } private: size_t size_; int * data_; }; 6/7
  • 7. Абстракция struct IntArray { public: explicit IntArray(size_t size) : data_(new int[size + 1]) { data_ [0] = size; } ~IntArray () { delete [] data_; } int & get(size_t i) { return data_[i + 1]; } size_t size () { return data_ [0]; } private: int * data_; }; 7/7