Подбор материала и презентация: Сазонов Д.О. Кафедра ПМиЭММ ВГТА Динамические объекты, ссылки.

Презентация:



Advertisements
Похожие презентации
Д.з Язык С++ - занятие 31. Задача 1: 1/1 + 1/3 + 1/5 … #include using namespace std; int main() { int n; cin >> n; double sum = 0;// Сумма for.
Advertisements

Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук.
Лекция 4. Введение в С++ Наследование, множественное наследование. Конструкторы, деструкторы. Виртуальные функции.
Статические поля класса Статические поля хранят данные, общие для всех элементов класса. Статическое поле существует в единственном экземпляре для всех.
1 Переопределение операций Макаревич Л. Г.. 2 Зачем нужна перегрузка операций? class Complex { double re; double im; public: Complex(double r=0, double.
Visual C++ Классы и объекты языка. Человек - примитивный Голова Туловище Руки Ноги Зрение Умение держать предмет в руках Могу ходить.
Дружественные функции Дружественные функции – это функции, объявленные вне класса, но имеющие доступ к закрытым и защищенным полям данного класса Дружественная.
ДЕЛЕГАТЫ Лекция 7 1. Зачем нужны делегаты 2 И данные, и код располагаются в памяти компьютера по определенным адресам. Передача адресов данных в C# происходит.
ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 4 Работа с бинарными файлами (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем, к.т.н. Поляков.
Объектно-ориентированное программирование С++. Лекция 6 Карпов В.Э.
Лекция 9. Введение в ООП. Часть 2 Красс Александр СПбГУ ИТМО, 2008.
НГТУ, каф. ВТ Наследование в С++ Макаревич Л. Г.НГТУ, каф. ВТ Наследование в С++ Макаревич Л. Г.
Лекция 12 Перегрузка операторов. Часть 2. Подбельский гл. 9.7, Страуструп гл. 11, Мейрс п. 11,15-17,19. Перегрузка копирующего конструктора T(const T&)
Прикладное программирование кафедра прикладной и компьютерной оптики Абстрактные типы данных.
МАССИВЫ 4 Определение 4 Описание 4 Обращение к элементам массива 4 Связь массивов с указателями 4 Примеры программ.
Инструкции C++ Условная инструкция Формат: if (условие) оператор; else оператор; Пример: if (i!=0) { if (j) j++; if(k) k++; else if(p) k--; } else i--;
1. a=? b=? c=? {int a, b, c; a=(b=2+3)/2 - 4+(c=5%2); printf("%d %d %d \n", a, b, c); }
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
УКАЗАТЕЛИ. Переменная - это именованная область памяти с заданным типом. [=значение]; int a; //Переменная типа integer с именем a int b=2;// Переменная.
Лекция 3 по дисциплине «Программные средства математических расчетов» тема: «Операторы циклов и работа с массивами в С++» гр. 8Е31 Мамонова Татьяна Егоровна.
Транксрипт:

Подбор материала и презентация: Сазонов Д.О. Кафедра ПМиЭММ ВГТА Динамические объекты, ссылки

Адресация в С++ Ячейки памяти нумеруются в компьютере последовательно: 1, 2, 3, 4 и т.д. Эти числа называются адресами ячеек памяти ….. 0x00x10x9B380x9B390x9B3A0x9B3B0x9B3C0xFFFF0xFFFE ….. 0x00x10x9B380x9B390x9B3A0x9B3B0x9B3C0xFFFF0xFFFE Блок 1 Блок N XXXXXX Рассмотрим случай, когда создается новая динамическая переменная. После запуска программы некоторые ячейки памяти сразу же становятся занятыми - в них помещается код, данные, стек и т.д. XXXXXXXXX int main(int argc, char* argv[]) { int *test; test=new int; *test=3; cout

Адресация в С++ Итак, значение указателя test (cout

Это объект test Вспомним, что такое объект и представим как он располагается в памяти class samp { int a; public: samp() { a =10 ; } int get_a() { return a; } } test; ….. 0x00x1 0x9B38 0x9AC Функция samp()Функция get_a() a 0x9AB Обращение к членам класса в случае НЕ ДИНАМИЧЕСКОГО объекта происходит следующим образом... test.a test.samp() test.get_a()

Обращение к членам класса в случае ДИНАМИЧЕСКОГО объекта происходит немного по другому Это класс test 0x9B38 0x9AC Функция samp()Функция get_a() a 0x9AB ….. 0x00x1 ….. 0x01020x01030x01040x0C020x0C030x0C04 ….. XXXX Динамический объект test Ссылается на область памяти, в которой записан адрес по которому находится класс 0x9b38

Это класс test 0x9B38 0x9AC Функция samp()Функция get_a() a 0x9AB ….. 0x00x1 ….. 0x0102 0x01030x01040x0C020x0C030x0C04 ….. XXXX 0x9b38 Адрес объекта test К членам класса теперь необходимо обращаться через стрелку... test->a test->samp() test-> get_a() Преимущество данного метода очевидно при использовании нескольких объектов. Для смены объекта нам не надо переписывать программу, достаточно заменить адрес хранения старого объекта на адрес хранения нового. Можно перебирать объекта через массив и многое другое о чем мы поговорим чуть попозже. Это класс test 0x9B38 0x9AC Функция samp()Функция get_a() a 0x9AB Это класс test 0x9B38 0x9AC Функция samp()Функция get_a() a 0x9AB

#include "stdafx.h" #include "iostream.h" int main() { int *p; p = new int(9); // задание начального значения равного 9 if(!p) { cout

#include "stdafx.h" #include "iostream.h" class samp { int i, j; public: samp(int a, int b) { i = a; j = b; } int get_product() { return i*j; } }; int main() { samp *p; p = new samp(6, 5); // размещение объекта с инициализацией if(!p) { cout

Рассмотрим пример: 1 class samp { 2 int a, b; 3 public: 4 samp(int n, int m) 5 { a = n; b = m; } 6 int get_a() { return a; } 7 int get_b() { return b; } 8 }; 9 int main() 10 { 11 samp ob[4] = { 12 samp(1, 2), 13 samp(3, 4), 14 samp(5, 6), 15 samp(7, 8) 16 }; 17 int i; 18 samp *p; // получение адреса начала массива 19 p = ob; 20 for(i=0; i

#include "stdafx.h" #include "iostream.h" class samp { int a, b; public: samp(int n, int m) { a = n; b = m; } int get_a() { return a; } int get_b() { return b; } }; int main() { samp ob[4] = { samp(1, 2), samp(3, 4), samp(5, 6), samp(7, 8) }; int i; samp *p; p = ob; // получение адреса начала массива for(i=0; i

Использование указателя this (Сравните следующие две программы) #include "stdafx.h" #include "iostream.h" #include "string.h" class inventory { char item[20]; double cost; int on_hand; public: inventory(char *i, double c, int o) { strcpy(this->item, i); // доступ к члену this->cost = c; // через this->on_hand = o; // указатель this } void show(); }; void inventory::show() { cout item; // использование this для доступа к членам cout cost; cout on_hand

Динамическое выделение памяти для массива объектов #include "stdafx.h" #include "iostream.h" class samp { int i, j; public: void set_ij(int a, int b) { i = a; j = b; } ~samp() { cout

Внимание! На следующее занятие будет контрольная работа! Повторить создание объектов, наследование, полиморфизм, указатели, ну и само собой синтаксис языка С++ Небольшое полезное замечание: Для печати русскими буквами в консольном приложении используйте следующий код: #include "windows.h" void print(char *s) { char dest[200]; char src[200]; strcpy(src,s); CharToOem(src,dest); cout