- •Методическое материалы по курсу
- •Cанкт-Петербург
- •Оглавление
- •Введение.
- •Задание: Разобраться в коде и вывести на консоль еще одну фразу: "It's a first program"
- •Типы данных и правила их применения:
- •Операции
- •Управляющие операторы
- •Задание: в данном примере реализуйте операции умножения и деления Оператор цикла for (;;)
- •Оператор цикла do-while
- •Задание: к примеру добавьте перегруженную функцию для суммирования чисел типа double, и проверьте ее работу
- •Модульная организация программы
- •Массивы
- •Задание: добавьте еще один элемент в массив при инициализации и посмотрите его размерность. В цикле увеличьте значение всех элементов массива на 10 и напечатайте его заново. Работа со строками
- •Ссылочный тип данных
- •Задание: Объявить еще одну переменную-ссылку на I и, изменив ее значение, пронаблюдать, как изменилось значение переменной I Работа с файлами
- •Взаимодействие с ассемблером
- •Обработка ошибок и исключений
- •Директивы препроцессора: Макросы и Условные директивы
- •Структуры
- •Задание : Добавить в сруктуру еще одно данное (стоимость модели) типа int, в коде функции main() задать значение этого данного переменной–структуры, и напечатать его.
- •Объектно-ориентированное программирование (ооп)
- •Терминология ооп
- •Структура как простейший класс
- •Конструкторы и деструкторы
- •Перегрузка методов класса
- •Дружественные функции и классы
- •Указатель this
- •Перегрузка операций
- •Множественное наследование
- •Если осталось время – разобраться в иерархии классов и принципов построения
- •Список литературы
Конструкторы и деструкторы
Конструктор (constructor) - метод класса, использующийся для инициализации переменных класса или для выделения памяти. Всегда имеет такое же имя, как и класс, в котором они определены. Выполняется автоматически при создании объекта типа class (оператор new или при объявлении переменной данного класса). Могут иметь аргументы и их можно перегружать.
Деструктор (destructor) - метод класса, использующийся обычно для освобождения выделенной памяти, т.е. для освобождения захваченных ресурсов. Имеет то же имя, что и имя класса, но ему предшествует тильда (~). Вызываются автоматически при использовании delete по отношению к указателю класса или если программа выходит из области действия объекта класса. Деструкторы не имеют параметров и их нельзя перегружать.
Использование простых конструкторов приведено в (\29CSTR).
#include <iostream>
#include <string.h>
using namespace std;
class cstring { // Класс для работы с динамическими строками
char *psz; // Указатель на строку
public:
cstring() // Конструктор по умолчанию (без аргументов)
{ psz = 0; // Инициализирует строку значением "default"
setstring("default"); }
cstring(char* s) // Второй конструктор, инициализирующий строку
{ psz = 0; // значением передаваемого параметра
setstring(s); }
~cstring() // Деструктор, уничтожающий динамический объект
{ if (psz) // Если память выделена – освободить ее
delete psz; }
char* getstring() // Функция класса, возвращающая указатель на строку
{ return(psz); }
void setstring(char* ); // Функция класса, задающая новую строку
};
void cstring::setstring(char* s) // Функция класса, задающая новую строку
{ // (перераспределяет память)
if (psz != 0) // Если указатель не пустой
delete psz; // уничтожить динамическую строку
int str_len = strlen(s) + 1; // Вычислить длину буфера под строку
psz = new char[str_len]; // Динамически выделить память под буфер
strcpy(psz, s); // Скопировать параметр в буфер
}
int main()
{
cstring s0; // Создание объекта (конструктор по умолчанию)
cstring s1("first string"); // Создание объекта (второй конструктор)
// Динамическое создание объектов класса
cstring* ps2 = new string; // Конструктор по умолчанию
cstring* ps3 = new string("third string"); // Второй конструктор
// Вывод всех созданных строк на экран
cout << "s0 : " << s0.getstring() << endl;
cout << "s1 : " << s1.getstring() << endl;
cout << "ps2: " << ps2->getstring() << endl;
cout << "ps3: " << ps3->getstring() << endl << endl;
// Изменение значения строки объекта s0 и вывод нового значения
s0.setstring("Zero String");
cout << "s0 : " << s0.getstring() << endl;
return(0);
}
Перегрузка методов класса
Перегрузка функций означает, что в текущей области действия заданы несколько функций с одним и тем же именем, и компилятор выбирает нужную, учитывая тип и число аргументов, переданных при ее вызове (\30ABSOL)
class absolute_value {
public:
int number(int test_data) // Функция работы с целыми числами
{ return (abs(test_data)); }
double number(double test_data) // Функция работы с вещественными числами
{ return (fabs(test_data)); }
};
int main()
{
absolute_value neg_val;
cout << "The absolute value is : " << neg_val.number(-583) << endl;
cout << "The absolute value is : " << neg_val.number(-583.175) << endl;
return(0);
}
