Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП.doc
Скачиваний:
2
Добавлен:
14.07.2019
Размер:
399.36 Кб
Скачать

ООП(Объектно-ориентированное программирование)

ООП- это стиль программирования , который фиксирует поведение реального мира так что детали разработки скрыты.

Основные принципы ООП :

  1. Инкапсуляция – это объединение данных о свойствах объектов и методов для работы с этими данными в единое целое – класс . Объект в ООП принято рассматривать как черный ящик , то есть все детали внутренней реализации нашего объекта должны быть скрыты от посторонних глаз . Если этого не сделать , то случайная ошибка может привести к неадекватной работе нашего объекта . Поэтому инкапсуляция требует , чтобы доступ к полям объекта осуществлялся только санкционировано , то есть только при помощи специально предусмотренных для этого метода. Инкапсуляция это не только объединение полей и методов в единое целое , но также и требование защищенности данных , то есть скрытие объекта от внешнего мира .

  2. Наследование – это процесс с помощью которого один объект может наследовать свойства и методы другого объекта в дополнение к своим .

  3. Полиморфизм – это способность объекта вести себя по-разному в зависимости от ситуации.

CLASS!

Class-это составной тип данных, введенный программистом на основе уже существующих типов данных.

Синтаксис создания класса!

Class имя_класса

{

[private|public|protected : ]

Поля и методы;

};

Ключевые слова : private,public,protected – спецификаторы доступа .

Public – члены класса открыты для доступа из вне. То есть к таким членам , можно обращаться внутри класса , так и через объект класса .

Private – члены класса закрыты для доступа из вне. Закрытые члены класса могут быть доступны только внутри этого класса.

Protected – будет рассмотрен в теме наследования , а пока считать его эквивалентным спецификатору private .

Секции private,public,protected могут быть располагаться в любом порядке и повторяться несколько раз.

Если явно не указан спецификатор , то по умолчанию используется private .

Одно из отличий между структурами и классами в языке C++ заключается в том , что по умолчанию в структурах указан спецификатор public .

#include<iostream>

#include<stdio.h>

using namespace std;

class Drob

{

private:

int ch;

int zn;

public:

void Print()

{

cout<<ch<<"/"<<zn<<endl;

}

};

void main()

{

Drob a;

a.ch=2;-ОШИБКА НА ЭТАПЕ КОМПИЛЯЦИИ , ТАК КАК ZN I CH НАХОДЯТСЯ В ОБЛАСТИ PRIVATE!

a.zn=3;-ОШИБКА НА ЭТАПЕ КОМПИЛЯЦИИ , ТАК КАК ZN I CH НАХОДЯТСЯ В ОБЛАСТИ PRIVATE!

a.Print();

}

Для того чтобы получить доступ к скрытым полям класса используется методы аксессоры, которые делятся на инспекторы и модификаторы . .

Методы модификаторы – позволяют изменить значение поля .

Методы инспекторы - позволяют получить значение поля .

Методы класса – можно определять не внутри класса , а за ним . А внутри класса объявлять только прототип .

#include<iostream>

#include<stdio.h>

using namespace std;

class Drob

{

....

public:

Void Print();

};

void Drob::Print()

{

....

}

Ключевое слово inline – обычно , когда программа встречает вызов функции она обращается к телу данной функции и выполняет его . Этот процесс увеличивает время выполнения программы , за счет обращения к описанию вызванной функции .

Некоторые функции в языке С++ можно определить как встраиваемые , то есть подставляемые в текст программы в местах обращения к этой функции .

Для этого используется ключевое слово inline .

Синтаксис inline

Inline тип_возвращаемого_значения имя функции (параметры)

{

Код;

}

Компилятор ключевое слово inline может игнорировать , если :

  1. размер функции слишком большой

  2. функция является рекурсивной

  3. функция содержит циклы,switch или if

  4. если функция повторяется в одном выражении несколько раз

Наиболее эффективно использовать inline функции в которых тело состоит из нескольких операторов . Если метод определять внутри класса , то это эквивалентно объявлению ключевого слова inline .

КОНСТРУКТОР!

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

#include <iostream>

using namespace std;

class Drob

{

private:

int ch;

int zn;

public:

Drob()

{

ch=2;

zn=3;

}

Void print()

{

cout<<ch<<"/"<<zn<<endl;

}

};

Void main()

{

Drob a;

a.print();/2/3

}

Конструктор вызывается в момент создания объекта автоматически и его не следует вызывать явно .

Конструкторы также могут принимать параметры .

В одном классе можно описать несколько конструкторов с разным списком параметров .

#include <iostream>

using namespace std;

class Drob

{

private:

int ch;

int zn;

public:

Drob()

{

ch=2;

zn=3;

}

Drob(int aCh,int aZn)

{

ch=aCh;

zn=aZn!=0?aZn:1;

}

Void print()

{

cout<<ch<<"/"<<zn<<endl;

}

};

Void main()

{

Drob a;

a.print();

Drob b(1,3);

b.print();

}

Конструктор у которого нет входных параметров , называется конструктором по умолчанию.

Типичная ошибка: это попытка вызвать явно конструктор по умолчанию .

Drob d(); - эту запись компилятор понимает как вызов прототипа функции .

Конструкции необходимо размещать в public секции , поскольку в противном случае конструктор будет скрытым и при создании объекта мы получим ошибку компиляции .

ДЕСТРУКТОРЫ

Деструктор – это специальный метод , который выполняет некий завершающий код перед тем как объект уничтожается . Например деструкторы используются для освобождения выделенную ранее в объект динамической памяти .

Имя деструктора представляет из себя символ тильда(~) и имя класса .

class MyClass

{

....

public:

~MyClass()

{

....

}

......

};

Деструктор не может иметь входных параметров . И аналогично конструкторам его следует размещать в public секции .

Конструктор вызывается в момент когда объект создается , а деструктор в момент когда объект умирает .

Время жизни объекта зависит от того в какой области видимости он создан .

Если объект глобальный , то его конструктор вызывается ещё до выполнения функции main , а деструктор при выходе из программы .

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

#include <iostream>

using namespace std;

class Test

{

private:

char ch;

public:

Test(char c)

{

ch = c;

cout<<"Constructor "<<ch<<"\n";

}

~Test()

{

cout<<"~Destructor "<<ch<<"\n";

}

};

void F()

{

Test d('D');

}

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