Объективное программирование — страница 6

  • Просмотров 9331
  • Скачиваний 351
  • Размер файла 45
    Кб

отдельно, при этом полное имя функции имеет вид <имя структуры>::<имя функции> - в теле фукции неявно определен один формальный параметр с именем this - ссылка на структуру, для которой вызывается функция (В нашем примере это будет struct dat *this ). Поля этой структуры доступны через явное использование этой ссылки this->month = 5; this->day++; или неявно month = 5; day++; - для переменной, имеющей тип некоторой структуры, вызов функцииэлемента этой

структуры имеет вид <имя переменной>.<имя функции> ( <список параметров> ) 2.4. Переопределение функций --------------------------- В Си++ возможно определение нескольких функций с одинаковым именем, но с разными типами формальных параметров. При этом компилятор выбирает соответствующую функцию по типу фактических параметров. Переопределяемую функцию необходимо объявить с ключевым словом overload: overload SetDat; void SetDat(int dd,int mm,int yy,dat *p) { // Дата

вводится в виде трех целых p->day=dd; p->month=mm; p->year=yy; } void SetDat(char *s,dat *p) // Дата вводится в виде строки { sscanf(s,"%d%d%d", &p->day, &p->month, &p->year); } void main() { dat a,b; SetDat(12, 12, 1990, &a); // Вызов первой функции SetDat("12,12,1990", &b); // Вызов второй функции } Функции-элементы также могут быть переопределены, при этом явного объявления не требуется. struct dat { int day,month,year; void SetDat(int,int,int); void Setdat(char *); } void dat::SetDat(int dd,int mm,int yy) { day=dd; month=mm; year=yy; } void dat::SetDat(char *s) {

sscanf(s,"%d%d%d",&day,&month,&year); } void main() { dat a,b; a.SetDat(12,12,1990); b.SetDat("12,12,1990"); } 2.5. Операторы управления динамической памятью --------------------------------------------- В библиотеке Си имеются две функции управления динамической памятью - malloc() и free(), которые выделяют и освобождают область памяти заданного размера (в байтах). В этой области программа может разместить переменную (или массив), которая называется динамической. При выделении памяти

под динамическую переменную необходимо при помощи операции sizeof определять количество байтов, необходимое для размещения переменной указанного типа. В Си++ введены два оператора, аналогичные функциям malloc и free new и delete. Они отличаются от соответствующих функций тем, что допускают использования в качестве аргументов непосредственно спецификацию типа создаваемой динамической переменной и ссылки на динамическую переменную: Си++

"Классический" Си ------------------------- ---------------------------------char *s,x[80]; char *s,x[80]; dat *p,*q; struct dat *p,*q; void main() void main() { { p = new dat; p = malloc(sizeof (struct dat)); q = new dat[15]; q = malloc(15*sizeof (struct dat)); gets(x); gets(x); s = new char[strlen(x)+1]; s = malloc(strlen(x)+1); ... ... delete p; free(p); delete q; free(q); delete s; free(s); } Операторы имеют вид: <результат: ссылка на <абстрактный динамическую переменную> new описатель типа> delete <ссылка на динамическую переменную> 2.6. Параметры функций по умолчанию