- •Void Print();
- •Void print()
- •Void main()
- •Void print()
- •Void main()
- •Void main()
- •Void print()
- •Void main()
- •Void print()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void print();
- •Void Drob::print()
- •Void main()
- •Void main()
- •Void print();
- •Void Drob::print()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main ()
- •Void main ()
- •Void main ()
ООП(Объектно-ориентированное программирование)
ООП- это стиль программирования , который фиксирует поведение реального мира так что детали разработки скрыты.
Основные принципы ООП :
Инкапсуляция – это объединение данных о свойствах объектов и методов для работы с этими данными в единое целое – класс . Объект в ООП принято рассматривать как черный ящик , то есть все детали внутренней реализации нашего объекта должны быть скрыты от посторонних глаз . Если этого не сделать , то случайная ошибка может привести к неадекватной работе нашего объекта . Поэтому инкапсуляция требует , чтобы доступ к полям объекта осуществлялся только санкционировано , то есть только при помощи специально предусмотренных для этого метода. Инкапсуляция это не только объединение полей и методов в единое целое , но также и требование защищенности данных , то есть скрытие объекта от внешнего мира .
Наследование – это процесс с помощью которого один объект может наследовать свойства и методы другого объекта в дополнение к своим .
Полиморфизм – это способность объекта вести себя по-разному в зависимости от ситуации.
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 может игнорировать , если :
размер функции слишком большой
функция является рекурсивной
функция содержит циклы,switch или if
если функция повторяется в одном выражении несколько раз
Наиболее эффективно использовать 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');
}