АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Неуказанное количество аргументов

Читайте также:
  1. A) количество товаров и услуг, предлагаемое в масштабе общества при данном уровне цен
  2. Count - свойство содержащее количество объектов
  3. Внутри системы характер и количество, собственно, упражнений, варьируются.
  4. Заинтересовать рекламируемой продукцией наибольшее количество людей.
  5. Количество ДЕНЕГ. уравнение ОБМЕНА фишера. проблема ДЕНЕЖНОГО ДЕФИЦИТА
  6. Количество крови и ее состав.
  7. Количество рабочих смен - 2
  8. Количество разводов
  9. Количество транспортных средств
  10. Количество участников: 25
  11. Количество участников: 30
  12. Количество учебных часов

Неуказанное (переменное) количество аргументов необходимо для функций ввода/вывода.

Это функции printf и scanf

int printf(char*format, …);

int scanf(char*format, …);

В прототипах «…» - любая комбинация аргументов. Но, для того, чтобы обработать свои аргументы функция обязательно должна знать их количество.

Такие функции обычно используют определённые соглашения, чтобы вычислить число аргументов. Эти соглашения не может проверить компилятор. Рекомендуется использовать такие функции как можно реже.

Рассмотрим пример

Функция с неуказанным числом аргументов: функция, которая выводит сообщение об ошибке; первый аргумент – целое число (серьёзность ошибки), далее идут строки в любом количестве. Список аргументов завершается нулевым указателем


void error (int severity);

int main(int argc, char*argv[]

{

switch (argc);

{

case 1:

error(0,argv[0],0);

break;

case 2:

error(0,argv[0],argv[1],0);

break;

default;

char buffer[100]={0};

error(0,”argc= “, itoa(argc,buffer),0);

}

return 0;

}


В примере используются аргументы функции main. Аргументы функции main – параметры командной строки консольного приложения; массив argv содержит хотя бы 1 элемент. argv[0] – полный путь к исполняемому файлу.

Функция itoa – преобразование целого в строку. Ей всегда нужен дополнительный выход.


#include “stdarg.h”

void error(int severity, …)

{

va_list ap;

va_start(ap,&severity);

for(;;);

{

char*p=va_arg(ap,char*);

if(p==0)

break;

cout<<p<<’ ‘;

}

va_end(ap);

cout<<endl;

if(severity)

exit(severity);

}


Подчёркнутое – средства стандартной библиотеки которые позволяют получить доступ к списку аргументов функции.

 

 

ИНКАПСУЛЯЦИЯ

Язык С++ напрямую поддерживает 4 принципа ООП:

Инкапсуляция

Наследование

Композиция

Полиморфизм

Основным принципом ООП является инкапсуляция. Основное понятие – объект.

В ООП есть 2 основных направления:

1) создание объектов на основе прототипов (Javascript, Lua, Python, Self)

2) создание объектов с использованием классов (C++, Java, C#, Simula, Python)

В языке программирования С++ средства ООП реализуют через специальный тип (класс).

Для понимания объекта необходимо понятие предметной области.

Предметная область – вид человеческой деятельности который автоматизируется с помощью программной системы. Примеры предметных областей:

1) образование (отчёт успеваемости студентов, контроль знаний)

2) бухгалтерский учёт (расчёт заработной платы, учёт основных средств)

В предметно области образования в задаче учёта успеваемости можно выделить основные понятия, с которыми будет работать программная система.

Такими понятиями будет: студент, оценка, дисциплина, преподаватель. В этом контексте. Легко ввести понятие объекта и объектного типа.

Объектный тип - это способ описания ключевого понятия из предметной области средствами языка программирования.

Объект – переменная объектного типа, которая задаёт конкретный экземпляр понятия из предметной области.

Например понятие преподаватель – объектный тип.

Экземпляр переменной – доцент Дунец.

Но программная система это не только понятия. Это конкретные данные и конкретные действия над ними.

Учитывая, что должен быть описан конкретный код определение объекта необходимо конкретизировать.

Эта конкретизация делается через понятие инкапсуляции.

Инкапсуляция – объединение данных объекта и связанных с этим объектом алгоритмов в единый элемент программы.

Класс – тип, который содержит в себе определение данных и алгоримов относящихся к конкретному понятию из предметной области.

Объект – переменная типа класс, состоящая из: данных и алгоритмов, которые определены в соответствующем классе.

Элементы и данные в составе класса (объекта) называются полями. Алгоритмы в составе класса (объекта) называются методами.

Пример:

В процедурно ориентированном программировании код и данные разделены. Код обрабатывает данные, которые поступают на вход программы, модифицируя набор переменных программы, выдавая результат.

 

Похожая схема для ООП будет выглядеть так

 

Грубая модель программной системы, написанная с использованием ООП – совокупность объектов, взаимодействующих между собой через вызовы методов.

 

 

Методы и поля.

Класс определяется с помощью ключевого слова class, за которым следует имя класса. Далее в фигурных скобках {} задаются определения методов и полей + специальные директивы.

Поле – переменная, которая определена внутри класса.

Метод – функция, которая задана внутри класса.

Пример: класс календарная дата.

class Date

{

public:

int d, m, y;

void init_date(int dd, int mm, int yy); (1)

void add_day(int dd);

(1) – инициализация данных

Алгоритмы методов, обычно определяются за пределами классов.


void Date::init_date(int dd, int mm, int yy)

{

d=dd;

m=mm;

y=yy;

// проверка на корректность

}

void Date::add_day(int dd)

{

d+=dd;

//проверить месяц и год

}


Определение метода обязательно содержит имя класса и операцию разрешения области видимости (::)

В ходе метода можно использовать поля.

В рассматриваемом примере поля очень тесно связаны между собой, по сложному алгоритму.

Количество дней зависит от номера месяца и т.п.

Метод init_date обязан проверить это соотношение. Иначе объект может потерять целостность.

Имеющийся класс можно использовать для определения переменных объектов.


void f();

{

Date d1;

Date *d2;

d1.init_date(14,10,2011); (1)

cout<<d1.d<<d1.m<<d1.y<<endl; (2)

d2=new Date; (3)

d2->init_date(14,12,2011); (4)

cout<<d2->d<<d2->m<<d2->y<<endl; (5)

delete d2

}

d1 – объект локальная переменная.

d2 – указатель на объект.


(1) – вызов метода из объекта. Алгоритм будет обрабатывать содержимое объекта d1. Если объект задается, как переменная то используется операция точка «.».

(2) Обращение к полю объекта.

(3) Объект создаётся в динамической памяти, указатель на него запоминается в переменной.

(4) Обращение к методу объекта через указатель.

(5) Обращение к полям объекта через указатель.

Каждый объект имеет свою копию полей. Вызов метода для конкретного объекта обрабатывает соответствующую копию полей.

Класс образует отдельную область видимости. Поля имеют такое же время жизни, как и объекты, в состав которого они входят.

 

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.006 сек.)