Сообщения без ответов | Активные темы Текущее время: 15 дек 2017, 16:13



Ответить на тему  [ Сообщений: 3 ] 
 Шпора по С++ 
Автор Сообщение
Администратор
Аватара пользователя

Зарегистрирован: 18 янв 2012, 01:25
Сообщения: 690
Откуда: Первоуральск (Екатеринбург)
Недостаток процедурно-ориентированных (Паскаль, С, Fortran) языков
1. Неограниченность доступа функций к глобальным данным.
2. Данные и функции в проекте "географически" находятся в разных местах, что плохочитабельно и не отображает картину "реального мира"

Объекто ориентированное программирование
Пример описания реального мира:
Свойства объекта <=> характеристика объекта (для людей - цвет глаз, рост, вес, возраст и тп., для машин - марка, мощность, тип двигателя и пр)
Поведение <=> реакция объекта на воздействие (нажали на тормоз, машина остановилась; спросили у боса о повышени, он ответил "да" или "нет")- функция (МЕТОДЫ В С++)
Объект = свойства объекта (характеристика объекта) + поведение ( реакция на воздействие (функция, методы)) - объектно ориентированное программирование.

ОБЪЕКТ, КЛАСС, ЭКЗЕМПЛЯР.
Таким образом класс - это шаблон, а экземпляр класса - конкретная реализация шаблона. А вот уже экземпляры класса являются объектами, то есть конкретными элементами, хранящими конкретные значения.
экземпляр класса <=> объект.

Пример программы:

Код:
class MyClass      //определение класса
 {
    private:      //приватные данные/функции, скрытые данные/функции, нельзя изменить, нет прямого доступа, только из метода (функции) данного класса
      int somedata;    //поле данных класса, член класса, описание класса, данные класса, которые нельзя изменить прямым доступом
                  //"глобальные переменные" класса, необходимые при работе с методами (функциями) данного класса
   
    public:      //общедоступные данные/функции, общее, есть доступ
      void setdata (int d) //метод класса, функция изменяющая значение поля данных класса
         {somedata=d;}
      
      void showdata()      //метод класса, функция отображающая значение поля данных класса
         {count<<"Значение поля равно "<<somedata<<endl}
 };
/////////////////////////////////////////////////////
 int main ()
 {
    MyClass s1,s2;       //определение двух объектов класса MyClass s1 и s2 (экземпляров класса MyClass)
   
    s1.setdata (901);    //вызов метода setdata(int d) класса MyClass объектом класса s1 => d=901 => somedata=901 в объекте класса s1     
    s2.setdata (101);    //вызов метода setdata(int d) класса MyClass объектом класса s2 => d=101 => somedata=101 в объекте класса s2
   
    s1.showdata();     //вызов метода showdata() класса MyClass объектом s1 => "Значение поля равно 901"
    s2.showdata();      //вызов метода showdata() класса MyClass объектом s2 => "Значение поля равно 101"
    return 0;
 }



ИНКАПСУЛЯЦИЯ
Если необходимо считать или изменить какие-либо данные объекта, нужно вызвать соответствующий метод (может быть несколько), который выполнит считывание/изменение и возвратит требуемое значение. Прямой доступ к данным невозможен! Это и есть ИНКАПСУЛЯЦИЯ!
Типичная программа на с++ состоит из большого количества объектов взаимодействующих между собой посредствам вызова методов (функций) друг друга, так как прямой доступ к данным объекта невозможен.

НАСЛЕДОВАНИЕ
Подкласс (производные класса)=свойства класса (базовый класс)+собственные свойства подкласса (производные класса)
class CountDn : public Counter
class CountDn - наследник класса Counter, подкласс, потомок.
: - наследование
public Counter - базовый класс, надкласс, родитель.

КОНСТРУКТОР
Предназначен для инициализации поля данных объектов класса при создании объекта класса. Имя конструктора должно в точности совпадать с именем класса!
У конструктора нет возвращаемого значения! стр 227
Пример:

ДЕСТРУКТОР
Вызывается при уничтожении объекта класса. Необходим для освобождения памяти выделенной конструктором. Имеет такое же имя как и конструктор, сопровождаемое "~"

ВНЕШНЯЯ ФУНКЦИЯ КЛАССА, ОПРЕДЕЛЕНИЕ ФУНКЦИИ ВНЕ КЛАССА.
void Distance::add_dist(Distance d2, Distance d3)

void - возвращаемый тип объекта класса
Distance - имя класса
:: - операция глобального разрешения, разрешает определение метода (функции) вне класса
add_dist - имя функции
Distance d2, Distance d3 - аргументы функции


PUBLIC, PROTECTED,PRIVATE
Код:
 
|Снецификатор|Доступ из класса|Доступ из производных класса|Доступ из внешних классов и функций|
   public:      Есть               Есть                     Есть      
   protected:           Есть               Есть                     Нет
   private:       Есть               Нет                     Нет



АДРЕСА И УКАЗАТЕЛИ
& - ссылка на переменную в аргументах функции, используется если из функции надо возвратить несколько значений
& - адрес переменной
указатель - переменная хранящая в себе значение адреса
int* iptr - указатель на целую переменную, класс,
iptr=&var1 - помещаем в переменную iptr адрес переменной var1
var2=*iptr - взять значение переменной на которую указывает указатель

УПРАВЛЕНИЕ ПАМЯТЬЮ "new" и "delete"
new - универсальная операция, получающая память у операционной системы и возвращающая указатель на начало выделенного блока.
delete - освобождает выделенный участк памяти, возвращая его операционной системе
-> - операция используемая для доступа к методам объекта, созданного с помощью оперции new

_________________
cайт: http://yourdevice.net/
форум: http://yourdevice.net/forum/


05 май 2017, 05:46
Профиль ICQ WWW
Администратор
Аватара пользователя

Зарегистрирован: 18 янв 2012, 01:25
Сообщения: 690
Откуда: Первоуральск (Екатеринбург)
Класс в языке C++ создаётся следующим образом:

Код:
  class MyClass: public ParentClass // ParentClass — класс-предок, если таковой имеется
  {
      public:
         // элементы в этой секции доступны из любой части программы
         MyClass(); // конструктор
         ~MyClass(); // деструктор
      protected:
         // элементы в этой секции доступны из класса и его потомков
      private:
         // элементы в этой секции доступны только из класса; это область доступа по умолчанию
  };


После своего создания класс считается полноценным типом данных и, следовательно экземпляры класса создаются следующим образом:

Код:
  MyClass myinstance;


Обращение к членам класса:

Код:
  myinstance.classmember


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

_________________
cайт: http://yourdevice.net/
форум: http://yourdevice.net/forum/


02 дек 2017, 16:33
Профиль ICQ WWW
Администратор
Аватара пользователя

Зарегистрирован: 18 янв 2012, 01:25
Сообщения: 690
Откуда: Первоуральск (Екатеринбург)
Код:
//подключили библиотеку <conio.h>
#include <conio.h>
// подключили стандартную библиотеку С++, по этому без ".h"
#include <iostream>

using std::count; //using - директива (команда), объявляет объект  count в пространстве имён std. Пространство имён - для разрешения проблеммы конфликта имён. Москва и Магнитогорск, ул Ленина, но города (пространство имён) разные. std - стандартное пространство имён.
using std::endl;

int main () // int -  для хранения в программе целого числа, отвечает за "число" в return
         // main - главная функция, зарезервировани стандартом
         //() - параметры данной функции (пример "CD C:\", "CD" - запускаемая программа "C:\" - параметр переданный в функцию)

   {         //{} - тело функции, блок операторов
   cout<<"Hello World!"<< endl;// оператор вывода в поток
      
   return 0;   // return 0; - оператор, который возвращает значение операционной системе. Если возвращается "0" то программа оспешно завершена, другое значение - ошибка.
   }

_________________
cайт: http://yourdevice.net/
форум: http://yourdevice.net/forum/


10 дек 2017, 12:08
Профиль ICQ WWW
Показать сообщения за:  Поле сортировки  
Ответить на тему   [ Сообщений: 3 ] 

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.
Русская поддержка phpBB