Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP_otvety.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.9 Mб
Скачать

Инкапсуляция есть объединение в едином объекте данных и кодов, оперирующих с этими данными. В терминологии ООП данные называются членами данных (data members) объекта, а коды - объектными методами или функциями-членами (methods, member functions).

Инкапсуляция позволяет в максимальной степени изолировать объект от внешнего окружения.

  1. Объявление и определение класса.

Понятие класса (class) явл центральным понятием языка С++. Класс-это определенный программистом тип, к которому относ-ся любые стр-ры д-х, опред-е посредством ключевых слов class, struct и union. При определении класса расширяются возможности яз С++,т.к. в дальнейшем этот класс можно исп как любой другой тип С++.

Определение класса выглядит след образом:

class <имя класса>

{

private://(закрытый)-члены класса, объявленные после, определены только внутри класса и вне исп-ся не могут

<объявления>//объявления как ф-ий, так и д-х

public://(открытый)- члены класса, объявленные после, определены как для членов класса, так и вне его

<объявления>

protected://(защищенный)- члены класса, объявленные после, определены для членов класса. его потомков и друзей

<объявления>

};

Ключевые слова private, public, protected иногда наз атрибутами д-па к членам класса.

В классе д. б.:*д-е(поля) как встроенного, так и польз. типа; *констр-ры, создающ. объекты класса;*дестр-ры, разруш объекты; *методы класса, среди кот различ селекторы и модиф-ры

Селекторы возвращ знач-е полей класса и их принято запис, как const ф-ю(get R, get I).

Модиф-ры измен знач-е полей класса(set C).

Компоненты(члены) класса-все, что входит в класс. Интерфейс-сов-сть открыт компонентов(все компоненты после слова public).

@@ class GrPoint

{private:

int x, y, color;

public:

void init (int wx, int wy, int wcolor);

int getcolor(void);

void setcolor(int wcolor);

}

  1. Конструкторы и деструкторы ( типы конструкторов и деструкторов)

Конструктор - это метод, который строит в памяти объект данного класса, а деструктор - это метод, который его удаляет. Конструкторы и деструкторы отличаются от других объектных методов следующими особенностями:

• Имеют имя, идентичное имени своего класса.

• Не имеют возвращаемого значения.

• Не могут наследоваться, хотя производный класс может вызывать конструкторы и деструкторы базового класса.

• Автоматически генерируются компилятором как public, если не были вами объявлены иначе.

• Автоматически вызываются компилятором, чтобы гарантировать надлежащее создание и уничтожение объектов классов.

• Могут содержать неявные обращения к операторам new и delete, если объект требует выделения и уничтожения динамической памяти.

Класс может содержать любое число конструкторов, в том числе ни одного. Конструкторы не могут быть объявлены виртуальными. Не помещайте все конструкторы в защищенной секции и старайтесь уменьшить их число, используя значения аргументов по умолчанию. Существует три вида конструкторов:

• Конструктор по умолчанию не имеет параметров. Если класс не содержит ни одного конструктора, компилятор автоматически создаст один конструктор по умолчанию, который просто выделяет память при создании объекта своего класса.

• Конструктор с аргументами позволяет инициализировать объект в момент его создания - вызывать различные функции, выделять динамическую память, присваивать переменным начальные значения и т.п.

• Конструктор копирования предназначен для создания объектов данного класса путем копирования данных из другого, уже существующего объекта этого класса. Такие конструкторы особенно целесообразны для создания копий объектов, которые моделируют динамические структуры данных. Однако, по умолчанию компилятор создает так называемые конструкторы поверхностного копирования (shallow copy constructors), которые копируют только члены данных. Поэтому если какие-то члены данных содержат указатели, сами данные не будут копироваться. Для реализации "глубокого" копирования в код конструктора надо включить соответствующие инструкции.

@@ class GrPoint

{private:

int x, y, color;

public:

GrPoint();//конструктор по умолчанию

GrPoint(int wx, int wy, int wcolor);

GrPoint(const GrPoint &wgp );

/*конст-р копирования*/

int getcolor(void);

void setnewcolor(int wcolor);

}

Класс может объявить только один общедоступный деструктор. Деструктор не имеет параметров и может быть объявлен виртуальным. Если класс не содержит объявления деструктора, компилятор автоматически создаст его.Если конструктор класса выделяет динамическую память для массива данных (с помощью оператора new), то деструктор, вероятно, освободит выделенную память (с помощью оператора delete) и т.п.

mystr.h:

class Mystr

{char *pstr;

int lstr;

public:

Mystr();//конструктор

~Mystr()//деструктор}

char *getptr(void);

int length(void);

void copy(char *s);

mystr.cpp:

Mystr::Mystr()

{pstr=new char[1];..отводится память для пустой строки (1 байт)

strcpy(pstr, “ ”);//или *pstr=’\0’

lstr=0;

}

Mystr::~Mystr()

{delete [ ] pstr;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]