- •Вопрос 1:Основные понятия языка c:структура программы, допустимые символы, синтаксис.
- •1)Основные понятия языка
- •2) Массивы объектов
- •Вопрос 1:Типы данных c.Примеры
- •Вопрос 1:Формативный ввод/вывод в языке c.Примеры
- •Вопрос 1:Типы данных c.Примеры
- •Вопрос 1 :Операция языка c.Примеры.
- •Вопрос 2:Базовые принципы ооп
- •Инкапсуляция
- •Наследование
- •Полиморфизм
Вопрос 1:Формативный ввод/вывод в языке c.Примеры
Основной задачей программирования является обработка информации, поэтому любой язык программирования имеет средства для ввода и вывода информации. В языке Си нет операторов ввода-вывода.
Ввод и вывод информации осуществляется через функции стандартной библиотеки. Прототипы рассматриваемых функций находятся в файле stdio.h. Эта библиотека содержит функции
printf() - для вывода информации
scanf() - для ввода информации.
Вывод информации
Функция printf() предназначена для форматированного вывода. Она переводит данные в символьное представление и выводит полученные изображения символов на экран. При этом у программиста имеется возможность форматировать данные, то есть влиять на их представление на экране.
Общая форма записи функции printf():
printf("СтрокаФорматов", объект1, объект2, ..., объектn);
СтрокаФорматов состоит из следующих элементов:
управляющих символов;
текста, представленного для непосредственного вывода;
форматов, предназначенных для вывода значений переменных различных типов.
Объекты могут отсутствовать.
Управляющие символы не выводятся на экран, а управляют расположением выводимых символов. Отличительной чертой управляющего символа является наличие обратного слэша '\' перед ним. Основные управляющие символы:
'\n' — перевод строки;
'\t' — горизонтальная табуляция;
'\v' — вертикальная табуляция;
'\b' — возврат на символ;
'\r' — возврат на начало строки;
'\a' — звуковой сигнал.
Форматы нужны для того, чтобы указывать вид, в котором информация будет выведена на экран. Отличительной чертой формата является наличие символа процент '%' перед ним:
%d — целое число типа int со знаком в десятичной системе счисления;
%u — целое число типа unsigned int;
%x — целое число типа int со знаком в шестнадцатеричной системе счисления;
%o — целое число типа int со знаком в восьмеричной системе счисления;
%hd — целое число типа short со знаком в десятичной системе счисления;
%hu — целое число типа unsigned short;
%hx — целое число типа short со знаком в шестнадцатеричной системе счисления;
%ld — целое число типа long int со знаком в десятичной системе счисления;
%lu — целое число типа unsigned long int;
%lx — целое число типа long int со знаком в шестнадцатеричной системе счисления;
%f — вещественный формат (числа с плавающей точкой типа float);
%lf — вещественный формат двойной точности (числа с плавающей точкой типа double);
%e — вещественный формат в экспоненциальной форме (числа с плавающей точкой типа float в экспоненциальной форме);
%c — символьный формат;
%s — строковый формат.
Пример
int a=5; float x = 2.78; printf("\n Значение переменной a=%d", a); printf("\n Значение переменной x=%f", x);
Результат работы программы
Значение переменной a=5 Значение переменной x=2.780000
При указании формата можно явным образом указать общее количество знакомест и количество знакомест, занимаемых дробной частью. Пример
float y=1.2345; printf("\n Значение переменной y=%10.5f\n", y);
Результат работы программы Значение переменной y= 1.23450
В приведенном примере 10 — общее количество знакомест под значение переменной; 5 — количество позиций после десятичной точки. В указанном примере количество знакомест в выводимом числе меньше 10, поэтому свободные знакоместа слева от числа заполняются пробелами. Такой способ форматирования часто используется для построения таблиц.
Ввод информации
Функция форматированного ввода данных с клавиатуры scanf() выполняет чтение данных, вводимых с клавиатуры, преобразует их во внутренний формат и передает вызывающей функции. При этом программист задает правила интерпретации входных данных с помощью спецификаций форматной строки. Общая форма записи функции scanf( )
scanf ("CтрокаФорматов", адрес1, адрес2,...);
Строка форматов аналогична функции printf(). Для формирования адреса переменной используется символ амперсанд '&':
адрес = &объект
Строка форматов и список аргументов для функции обязательны.
Пример
#include <stdio.h> #include <stdlib.h> int main() {
float y;
system("chcp 1251");
system("cls");
printf("Введите y: ");
scanf("%f",&y); // Ввод значения переменной y
printf("Значение переменной y=%f",y);
getchar(); getchar();
return 0; }
Результат
работы программы:
Вопрос 2:Указатели на объекты в C++.Указатель this
1)Указатели на объекты в C++
В языке С можно получить доступ к структуре непосредственно или с использованием указателей на эту структуру. Аналогичным образом в С++ можно ссылаться на объект непосредственно, или используя указатель на этот объект. Указатели на объекты являются одним из важнейших понятий С++.
Для доступа к членам объекта через сам объект используется оператор «точка» (.). Если же используется указатель на объект, тогда необходимо использовать оператор «стрелка» (—>). Использование операторов «точка» и «стрелка» аналогично их использованию для структур и объединений.
Указатель на объект объявляется с использованием того же синтаксиса, что и указатели на данные других типов. В следующей программе создается простой класс с именем P_example и определяется объект этого класса ob, а также указатель р на объект P_example. Ниже проиллюстрировано, как получить доступ к объекту ob непосредственно и опосредованно с использованием указателя: // простой пример использования указателя на объект #include <iostream.h> class P_example { int num; public: void set_num(int val) {num = val; } void show_num(); }; void P_example::show_num() { cout << num << " \n"; } int main() { P_example ob, *p; // объявление объекта и указателя на него ob.set_num(1); // прямой доступ к ob ob.show_num(); р = &ob; // присвоение р адреса ob p->show_num(); // доступ к ob с помощью указателя return 0; }
Обратим внимание, что адрес объекта ob получен с использованием оператора взятия адреса & точно так же, как берется адрес переменной любого типа.
Инкремент или декремент указателя изменяет его таким образом, что он всегда указывает на следующий элемент базового типа. То же самое справедливо и для объектов. Следующий пример модифицирует предыдущую программу, в результате чего ob становится массивом из двух элементов типа P_example. Обратим внимание на инкремент и декремент указателя р, с помощью которого осуществляется доступ к элементам массива: // увеличение указателя на объект #include <iostream.h> class P_example { int num; public: void set_num(int val) {num = val;} void show_num(); }; void P_example::show_num() { cout << num << "\n"; } int main() { P_example ob[2], *p; ob[0].set_num(10); // прямой доступ к объекту ob[1].set_num(20); p = &ob[0]; // получение указателя на первый элемент p->show_num(); // вывод значения ob[0] с помощью указателя р++; // переход к следующему объекту p->show_num(); // вывод значения ob[1] с помощью указателя р--; // переход к предыдущему объекту p->show_num(); // вывод значения оb [0] return 0; }
Программа выводит на экран числа 10, 20, 10.
2)Указатели this
Всякий раз, когда вызывается функция-член, автоматически передается указатель на объект, вызывающий данную функцию. Можно получить доступ к этому указателю, используя this. Указатель this служит неявным параметром всех функций-членов. (Функции-друзья не имеют указателя this.) Например, в операторе: оb.f(); функции f() автоматически передается указатель this, указывающий на объект ob.
Как известно, функции-члены имеют непосредственный доступ к данным класса. Например, если задан следующий класс: class cl { int i; // ... }; то функция-член может присвоить переменной i значение 10, используя следующую инструкцию: i = 10; Фактически эта инструкция является сокращенной записью следующий инструкции: this->i = 10;
Для того, чтобы увидеть, как работает указатель this, рассмотрим следующую короткую программу: #include <iostream.h> class cl { int i; public: void load_i(int val) { this->i = val; } // то же самое, что и i = val int get_i() { return this->i; } // то же самое, что и return i }; int main () { cl o; o.load_i(100); cout << o.get_i(); return 0; }
Эта программа выводит на экран число 100.
Билет 4
