Шпора по С++

Транзисторы, резисторы, микросхемы, микроконтроллеры. C/C++, C#, PHP, HTML и пр.

Модератор: KopylovSergey

Ответить
Аватара пользователя
admin
Администратор
Сообщения: 762
Зарегистрирован: 18 янв 2012, 01:25
Откуда: Первоуральск (Екатеринбург)
Контактная информация:

Шпора по С++

Сообщение admin » 05 май 2017, 05:46

Недостаток процедурно-ориентированных (Паскаль, С, 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

Аватара пользователя
admin
Администратор
Сообщения: 762
Зарегистрирован: 18 янв 2012, 01:25
Откуда: Первоуральск (Екатеринбург)
Контактная информация:

Re: Шпора по С++

Сообщение admin » 02 дек 2017, 16:33

Класс в языке C++ создаётся следующим образом:

Код: Выделить всё

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

Код: Выделить всё

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

Код: Выделить всё

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

Аватара пользователя
admin
Администратор
Сообщения: 762
Зарегистрирован: 18 янв 2012, 01:25
Откуда: Первоуральск (Екатеринбург)
Контактная информация:

Re: Шпора по С++

Сообщение admin » 10 дек 2017, 12:08

Код: Выделить всё

//подключили библиотеку <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" то программа оспешно завершена, другое значение - ошибка.
	}

Ответить