🗊Презентация Классы, структуры, объекты

Нажмите для полного просмотра!
Классы, структуры, объекты, слайд №1Классы, структуры, объекты, слайд №2Классы, структуры, объекты, слайд №3Классы, структуры, объекты, слайд №4Классы, структуры, объекты, слайд №5Классы, структуры, объекты, слайд №6Классы, структуры, объекты, слайд №7Классы, структуры, объекты, слайд №8Классы, структуры, объекты, слайд №9Классы, структуры, объекты, слайд №10Классы, структуры, объекты, слайд №11Классы, структуры, объекты, слайд №12Классы, структуры, объекты, слайд №13Классы, структуры, объекты, слайд №14Классы, структуры, объекты, слайд №15Классы, структуры, объекты, слайд №16Классы, структуры, объекты, слайд №17Классы, структуры, объекты, слайд №18Классы, структуры, объекты, слайд №19Классы, структуры, объекты, слайд №20Классы, структуры, объекты, слайд №21Классы, структуры, объекты, слайд №22Классы, структуры, объекты, слайд №23Классы, структуры, объекты, слайд №24Классы, структуры, объекты, слайд №25

Содержание

Вы можете ознакомиться и скачать презентацию на тему Классы, структуры, объекты. Доклад-сообщение содержит 25 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





САОД
А. Задорожный
2017
Описание слайда:
САОД А. Задорожный 2017

Слайд 2





Вопросы для повторения
Из каких шагов состоит построение программы на C++?
Как в тексте программы обнаружить инструкции препроцессора? Приведите примеры инструкций препроцессора.
Назовите 4 основных типа данных, определенных в языке C++.
Можно ли в C++ написать x = y = 3? Почему?
Можно ли вызвать void foo(int & a) следующим образом: foo(x+y); Почему?
Проинтерпретируйте объявление второго параметра main.
	int main(int argc, char* argv[])
Сколько операций умножения в операторе *p = *p * 2?
Если массив w проинициализирован значениями 1, 2, 3. Чему равно значение выражения *w?
Чему равна величина p + i, где p – указатель на массив целых, а i – целое число?
Описание слайда:
Вопросы для повторения Из каких шагов состоит построение программы на C++? Как в тексте программы обнаружить инструкции препроцессора? Приведите примеры инструкций препроцессора. Назовите 4 основных типа данных, определенных в языке C++. Можно ли в C++ написать x = y = 3? Почему? Можно ли вызвать void foo(int & a) следующим образом: foo(x+y); Почему? Проинтерпретируйте объявление второго параметра main. int main(int argc, char* argv[]) Сколько операций умножения в операторе *p = *p * 2? Если массив w проинициализирован значениями 1, 2, 3. Чему равно значение выражения *w? Чему равна величина p + i, где p – указатель на массив целых, а i – целое число?

Слайд 3





Содержание
Классы, структуры, объекты
Время жизни переменных (объектов)
Переопределение операций
Inline функции и методы
Управление памятью и динамические объекты
Глобальные переменные и статические поля
Виды конструкторов в C++
Ссылки в C# (.Net)
Строки STL
Описание слайда:
Содержание Классы, структуры, объекты Время жизни переменных (объектов) Переопределение операций Inline функции и методы Управление памятью и динамические объекты Глобальные переменные и статические поля Виды конструкторов в C++ Ссылки в C# (.Net) Строки STL

Слайд 4





Классы, структуры, объекты
Классы объявляются по аналогии с C#
class CDate {
	int m_nYear;
	int m_nMonth;
	int m_nDay;
public:			//Указывается не перед каждым метдом
	CDate();
	~CDate() {}	//Конструктор, как правило, public
};			 //Точка с запятой обязательна!
Объявления, как правило, в заголовочном файле
Описание слайда:
Классы, структуры, объекты Классы объявляются по аналогии с C# class CDate { int m_nYear; int m_nMonth; int m_nDay; public: //Указывается не перед каждым метдом CDate(); ~CDate() {} //Конструктор, как правило, public }; //Точка с запятой обязательна! Объявления, как правило, в заголовочном файле

Слайд 5





Реализация методов
				Date.cpp
#include “Date.h”
 
CDate::CDate () { 	//Указываем класс
    m_nYear = 1;
m_nMonth = 1;
m_nDay = 1;
}
Описание слайда:
Реализация методов Date.cpp #include “Date.h”   CDate::CDate () { //Указываем класс m_nYear = 1; m_nMonth = 1; m_nDay = 1; }

Слайд 6





Объявление и время жизни объектов
#include “Date.h”
 int main(){
	CDate d; 	// Это не ссылка, а объект!
	return 0;
}
Локальные объекты создаются при выполнении объявления.
Локальные объекты исчезают по завершении блока в котором они были объявлены.
Глобальные объекты объявляются вне блоков.
Глобальные объекты создаются до начала работы программы, а разрушаются после завершения программы
Описание слайда:
Объявление и время жизни объектов #include “Date.h”  int main(){ CDate d; // Это не ссылка, а объект! return 0; } Локальные объекты создаются при выполнении объявления. Локальные объекты исчезают по завершении блока в котором они были объявлены. Глобальные объекты объявляются вне блоков. Глобальные объекты создаются до начала работы программы, а разрушаются после завершения программы

Слайд 7





Конструкторы инициализации
class CDate {
	int m_nYear;
	int m_nMonth;
	int m_nDay;
public:
	CDate();
	CDate(int Year, int Mon=1, int Day=1);
	~CDate() {}
};
Параметры по умолчанию задаются при объявлении!
Описание слайда:
Конструкторы инициализации class CDate { int m_nYear; int m_nMonth; int m_nDay; public: CDate(); CDate(int Year, int Mon=1, int Day=1); ~CDate() {} }; Параметры по умолчанию задаются при объявлении!

Слайд 8





Конструкторы инициализации
CDate::CDate (int Year, int Mon, int Day) {
   if (Year < 1 || Year > 10000) 
	Year = 1;
   if (Mon < 1 || Mon > 12) 
	Mon = 1;
   int vDays[12]={31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
   if (Mon < 1 || Mon > 12) 
	Mon = 1;
   if (Day < 1 || Day > vDays[Mon-1]) 
	Day = 1;
   if (Mon == 2)
	if(Day == 29 && (Year % 4 > 0 || (Year % 100 == 0 && Year % 400 >0)))
	{
			Day = 1;
			Mon = 3;
	}
   m_nYear = Year;
   m_nMonth = Mon;
   m_nDay = Day;
}
Конструктор обеспечивает правильность создаваемой даты
CDate d(2006, 10, 12), t(2006, 11), e(2006);
Описание слайда:
Конструкторы инициализации CDate::CDate (int Year, int Mon, int Day) { if (Year < 1 || Year > 10000) Year = 1; if (Mon < 1 || Mon > 12) Mon = 1; int vDays[12]={31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if (Mon < 1 || Mon > 12) Mon = 1; if (Day < 1 || Day > vDays[Mon-1]) Day = 1; if (Mon == 2) if(Day == 29 && (Year % 4 > 0 || (Year % 100 == 0 && Year % 400 >0))) { Day = 1; Mon = 3; } m_nYear = Year; m_nMonth = Mon; m_nDay = Day; } Конструктор обеспечивает правильность создаваемой даты CDate d(2006, 10, 12), t(2006, 11), e(2006);

Слайд 9





Структуры
Структуры – те же классы!
По умолчанию в них действует область видимости public
struct CDate {
private:
	int m_nYear;
	int m_nMonth;
	int m_nDay;
public:			
	CDate();
	~CDate() {}	//Конструктор, как правило, public
};			 //Точка с запятой обязательна!
Описание слайда:
Структуры Структуры – те же классы! По умолчанию в них действует область видимости public struct CDate { private: int m_nYear; int m_nMonth; int m_nDay; public: CDate(); ~CDate() {} //Конструктор, как правило, public }; //Точка с запятой обязательна!

Слайд 10





Контрольные вопросы
К чему приведет объявление класса в C++ без использования слова public?
Почему в конце объявления класса ставится точка с запятой?
Определите время жизни объекта. Сформулируйте правило, по которому возникают и исчезают объекты в C++.
В чем различие между объектами в C++ и C# (.Net)?
Опишите время жизни объектов в C# (.Net)?
Что такое “конструктор инициализации”? 
Опишите правила определения и использования параметров по умолчанию. (Где они указываются и почему, как они расположены в списке параметров, как могут опускаться при вызове)
В чем различие в C++ между struct и class?
Как будет исправлена дата при вызове CDate d(0, 15, 2006), если конструктор реализован как в лекции? Какая дата будет задана при вызове CDate d(2007)?
Описание слайда:
Контрольные вопросы К чему приведет объявление класса в C++ без использования слова public? Почему в конце объявления класса ставится точка с запятой? Определите время жизни объекта. Сформулируйте правило, по которому возникают и исчезают объекты в C++. В чем различие между объектами в C++ и C# (.Net)? Опишите время жизни объектов в C# (.Net)? Что такое “конструктор инициализации”? Опишите правила определения и использования параметров по умолчанию. (Где они указываются и почему, как они расположены в списке параметров, как могут опускаться при вызове) В чем различие в C++ между struct и class? Как будет исправлена дата при вызове CDate d(0, 15, 2006), если конструктор реализован как в лекции? Какая дата будет задана при вызове CDate d(2007)?

Слайд 11





Вызов функции и inline
Вызов функции требует времени:
Вычислить и поместить в стек параметры
Запомнить адрес возврата 
Переключить стек и передать управление на функцию
…
Переключить стек и вернуть управление в вызывающий код
Частые вызовы коротких функций снижают эффективность выполнения программ
Функцию можно пометить квалификатором inline. При этом, компилятор не будет генерировать эту функцию, а в местах вызова сгенерирует код, эквивалентный вызову.
inline int max(int a, int b){return a>b? a: b;}
Описание слайда:
Вызов функции и inline Вызов функции требует времени: Вычислить и поместить в стек параметры Запомнить адрес возврата Переключить стек и передать управление на функцию … Переключить стек и вернуть управление в вызывающий код Частые вызовы коротких функций снижают эффективность выполнения программ Функцию можно пометить квалификатором inline. При этом, компилятор не будет генерировать эту функцию, а в местах вызова сгенерирует код, эквивалентный вызову. inline int max(int a, int b){return a>b? a: b;}

Слайд 12





Переопределение операций
Inline методы
class CDate {
	int m_nYear;
	int m_nMonth;
	int m_nDay;
public:
	CDate();
	CDate(int Year, int Mon=1, int Day=1);
	~CDate() {}
	bool operator < (CDate &d) {
		return m_nYear < d.m_nYear 
	|| (m_nYear == d.m_nYear && m_nMonth < d.m_nMonth) 
	|| (m_nYear == d.m_nYear && m_nMonth == d.m_nMonth 		&& m_nDay < d.m_nDay);
	}
};
cout << (t < d) << “ “ << (d < e) << endl;
Описание слайда:
Переопределение операций Inline методы class CDate { int m_nYear; int m_nMonth; int m_nDay; public: CDate(); CDate(int Year, int Mon=1, int Day=1); ~CDate() {} bool operator < (CDate &d) { return m_nYear < d.m_nYear || (m_nYear == d.m_nYear && m_nMonth < d.m_nMonth) || (m_nYear == d.m_nYear && m_nMonth == d.m_nMonth && m_nDay < d.m_nDay); } }; cout << (t < d) << “ “ << (d < e) << endl;

Слайд 13





“Динамические” объекты
Char *s = new char[128];
CDate *p = new CDate();
CDate *pv = new CDate[5];
delete [] s;
delete p;
delete [] pv;
“Динамические” объекты создаются оператором new
За удаление таких объектов отвечает программа!
Описание слайда:
“Динамические” объекты Char *s = new char[128]; CDate *p = new CDate(); CDate *pv = new CDate[5]; delete [] s; delete p; delete [] pv; “Динамические” объекты создаются оператором new За удаление таких объектов отвечает программа!

Слайд 14





Глобальные объекты
Глобальный объект должен включаться в h-файл 
Что бы избежать, при этом, его экземпляров во множество объектных файлов в языке введен квалификатор extern
H-файл ---------------------------
extern CDate UnixBase;
Один из CPP-файлов ---------------------------
CDate UnixBase(1970,1,1);
В других CPP, где включен h-файл можно использовать UnixBase!
Описание слайда:
Глобальные объекты Глобальный объект должен включаться в h-файл Что бы избежать, при этом, его экземпляров во множество объектных файлов в языке введен квалификатор extern H-файл --------------------------- extern CDate UnixBase; Один из CPP-файлов --------------------------- CDate UnixBase(1970,1,1); В других CPP, где включен h-файл можно использовать UnixBase!

Слайд 15





Статические поля
Статические поля объявляются в классе с квалификатором static
H-файл ---------------------------
class CTest
{
	public:
		static int Count;
};
В CPP-файле ---------------------------
int CTest :: Count = 0
В других CPP, где включен h-файл можно использовать CTest :: Count!
Описание слайда:
Статические поля Статические поля объявляются в классе с квалификатором static H-файл --------------------------- class CTest { public: static int Count; }; В CPP-файле --------------------------- int CTest :: Count = 0 В других CPP, где включен h-файл можно использовать CTest :: Count!

Слайд 16





Виды конструкторов
Класс CStr
class CStr {
	char* m_pszText;
public:
	CStr () {m_pszText = 0;} //По умолчанию
	~ CStr () { delete []m_pszText;}
};
Здесь деструктор обязателен!
Описание слайда:
Виды конструкторов Класс CStr class CStr { char* m_pszText; public: CStr () {m_pszText = 0;} //По умолчанию ~ CStr () { delete []m_pszText;} }; Здесь деструктор обязателен!

Слайд 17





Доработка CStr
Оператор преобразования типа (CStr=>char*)

operator const char *()const {return m_pszText ? m_pszText : “”;} 
Теперь объекты CStr можно применять везде, где нужно использовать z-строку!
Описание слайда:
Доработка CStr Оператор преобразования типа (CStr=>char*) operator const char *()const {return m_pszText ? m_pszText : “”;} Теперь объекты CStr можно применять везде, где нужно использовать z-строку!

Слайд 18





Конструктор инициализации для CStr
CStr (const char * p) 
{
	m_pszText = new char [strlen(p) + 1];
	strcpy (m_pszText, p);
}
Теперь можно: 
	CStr s = “abc”;
Описание слайда:
Конструктор инициализации для CStr CStr (const char * p) { m_pszText = new char [strlen(p) + 1]; strcpy (m_pszText, p); } Теперь можно: CStr s = “abc”;

Слайд 19





Варианты использования CStr
Неправильное копирование
void Test1 (CStr sz) 
{}
 CStr Test2 () {
CStr sz= “123”;
return sz;
}
int main(){
	CStr s = “1234”;
	Test1(s);
	CStr t = Test2();
}
Описание слайда:
Варианты использования CStr Неправильное копирование void Test1 (CStr sz) {}  CStr Test2 () { CStr sz= “123”; return sz; } int main(){ CStr s = “1234”; Test1(s); CStr t = Test2(); }

Слайд 20





Конструктор копирования
CStr (const CStr &s) //Константная ссылка на объект
{
	if (s.m_pszText == 0)
		m_pszText = 0;
	else {
		m_pszText = new char 							[strlen(s.m_pszText) + 1];
		srtcpy (m_pszText, s.m_pszText);
	}
}
Описание слайда:
Конструктор копирования CStr (const CStr &s) //Константная ссылка на объект { if (s.m_pszText == 0) m_pszText = 0; else { m_pszText = new char [strlen(s.m_pszText) + 1]; srtcpy (m_pszText, s.m_pszText); } }

Слайд 21





Создание копии
Теперь есть правила 
Копирования
В результате получаем:
Копии можно создавать и использовать без ограничений!
Описание слайда:
Создание копии Теперь есть правила Копирования В результате получаем: Копии можно создавать и использовать без ограничений!

Слайд 22





Ссылки и объекты в C#
Reference Type (Value Types похожи на C++)
Всегда ссылка, но !
Ссылка в .Net – это самостоятельная переменная!
Копирование объектов в .Net довольно сложная задача!
Описание слайда:
Ссылки и объекты в C# Reference Type (Value Types похожи на C++) Всегда ссылка, но ! Ссылка в .Net – это самостоятельная переменная! Копирование объектов в .Net довольно сложная задача!

Слайд 23





Ссылки и объекты в C#
Сравнение понятий
Описание слайда:
Ссылки и объекты в C# Сравнение понятий

Слайд 24





Строки стандартной библиотеки
#include <iostream>
#include <string> 	// Появился тип string.
using namespace std; 
string s;
cin >> s;
cout << s.length() << endl;
cout << s[0] << endl;
cout << (s + s) << endl;
…
Более полно будет рассмотрено в дальнейшем…
Описание слайда:
Строки стандартной библиотеки #include <iostream> #include <string> // Появился тип string. using namespace std; string s; cin >> s; cout << s.length() << endl; cout << s[0] << endl; cout << (s + s) << endl; … Более полно будет рассмотрено в дальнейшем…

Слайд 25





Контрольные вопросы
Что означает запись o.operator = (t)? Как ее можно эквивалентно записать иначе?
Переопределите операцию == для CDate.
Что такое и зачем нужны inline функции и методы?
Как объявить inline метод в классе?
Опишите объявление и использование глобальных переменных в C++. Как их объявить, что бы можно было использовать в разных модулях? Как добиться того, что бы был создан только 1 уникальный экземпляр глобальной переменной?
Опишите объявление статических полей класса в C++.
Перечислите виды конструкторов применяемых в C++.
Почему для CDate не нужен деструктор и конструктор копии, а для CStr нужны?
Почему в конструктор копии передают ссылку на объект, а не копию объекта?
Приведите примеры, когда копии объектов возникают без явного вызова конструктора.
Опишите, чем понятие ссылки в .Net отличается от ссылки в C++.
Описание слайда:
Контрольные вопросы Что означает запись o.operator = (t)? Как ее можно эквивалентно записать иначе? Переопределите операцию == для CDate. Что такое и зачем нужны inline функции и методы? Как объявить inline метод в классе? Опишите объявление и использование глобальных переменных в C++. Как их объявить, что бы можно было использовать в разных модулях? Как добиться того, что бы был создан только 1 уникальный экземпляр глобальной переменной? Опишите объявление статических полей класса в C++. Перечислите виды конструкторов применяемых в C++. Почему для CDate не нужен деструктор и конструктор копии, а для CStr нужны? Почему в конструктор копии передают ссылку на объект, а не копию объекта? Приведите примеры, когда копии объектов возникают без явного вызова конструктора. Опишите, чем понятие ссылки в .Net отличается от ссылки в C++.



Похожие презентации
Mypresentation.ru
Загрузить презентацию