Опубликован: 01.11.2004 | Уровень: для всех | Доступ: свободно | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 6:

Простые типы данных

< Лекция 5 || Лекция 6: 123456 || Лекция 7 >
Аннотация: Рассматривается понятие объекта данных. Анализируется реализация простых типов данных в различных языках программирования. Описывается представления целых и вещественных типов в памяти компьютера.

Переменные и константы

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

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

Переменные и константы - это объекты данных. При создании переменной или константы им назначается имя, называемое иногда идентификатором. В отличие от переменной, атрибут "значение" объекта данных "константа" не может быть изменен в процессе выполнения программы.

Объявление объектов данных

Перед использованием в программе любой объект данных должен быть объявлен. Однако некоторые языки допускают неявное объявление. Так, в языке FORTRAN компилятор определяет тип используемой, но предварительно не объявленной переменной по первому символу имени, а в языке Perl неявное объявление переменной происходит при присваивании ей начального значения. Некоторые языки выполняют неявное объявление переменных, используемых в качестве счетчиков циклов.

Оператор объявления сообщает компилятору информацию об идентификаторах и типах данных, назначаемых объектам данных, и о предполагаемом времени жизни этих объектов (глобальная или локальная переменная, переменная - член класса, статическая переменная и т.п.).

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

В языке C++ для объявления новых имен в текущей области видимости предназначаются операторы объявления.

Например: int i, j; float m, n;

Оператор объявления в языке C++ может указываться в любом допустимом месте программы.

В языке C++ каждый оператор объявления завершается символом конца оператора (точка с запятой). В операторе объявления может объявляться несколько объектов данных одного типа, перечисляемых через запятую. Любой оператор объявления начинается с ключевого слова или идентификатора, указывающего тип объявляемого объекта.

Объявляемыми объектами данных могут быть названия типов и имена объектов.

Объявление определяет имя внутри области видимости. Имя, объявляемое внутри блока, класса, функции или пространства имен, является локальным. Блок в языке C++ заключается в фигурные скобки. Если вне блока существуют глобальные имена, обозначаемые теми же идентификаторами, то они становятся скрыты внутри блока и к ним следует обращаться, используя оператор разрешения области видимости ::.

Например:

int i1;      // Объявление глобальной 
             // переменной
void metod1() {
  int i1;    // Объявление локальной
             // переменной
  i1=22;     // Доступ к локальной
             // переменной метода
  ::i1=44;   // Доступ к глобальной 
             // переменной 
  { int i1;  // Объявление локальной
             // переменной
    i1=33;   // Доступ к локальной 
             // переменной блока
  }
i1=44;       // Доступ к локальной
             // переменной
}

В языке C++ объявления применяются для создания нового имени, используемого в приложении (имя может указывать не только объект данных). Объявления позволяют:

  • специфицировать класс памяти, тип и область действия объекта;
  • инициализировать объект начальным значением;
  • назначать имена константе (при объявлении перечислимого типа);
  • объявлять новый тип ( class, struct и union );
  • определять синоним существующего типа ( typedef );
  • специфицировать шаблон классов или функций ( template );
  • специфицировать пространство имен ( namespace );
  • специфицировать класс памяти, тип и область действия подпрограммы.

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

В языке C++ при каждом объявлении локального объекта под него выделяется память.

Например:

// Объявление и инициализация 
// локального объекта в цикле 

do { char char1 = _getch(); 
    if( char1 == NULL ) continue; 
	    return (char1);
} while( 1 );

Удаление объекта, который был объявлен в цикле, происходит после каждой итерации, при выходе из блока или при передаче управления в точку, расположенную выше объявления этого объекта.

Процедура удаления объекта в языке C++ может включать не только удаление объекта из памяти (освобождение памяти), но и выполнение деструкторов (для объектов типа класса).

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

Например:

boolean b1=true;   
  // Оператор присваивания 
  // задается символом =
char  c1='N';
int int1=123;

Имена могут иметь следующие элементы языка Java:

  • пакет, определяемый оператором package ;
  • тип, вводимый определением класса или интерфейса;
  • поле, являющееся переменной типа класса или типа интерфейса;
  • группа методов типа класса или типа интерфейса;
  • переменная, являющаяся формальным параметром метода;
  • переменная, являющаяся локальной переменной блока;
  • метка оператора.

Если имя или выражение означает переменную или значение простого типа, тогда тип этой переменной или значения называется типом имени или выражения.

В языке Object Pascal оператор объявления может указываться только в области объявлений, определяемой ключевым словом var.

Например:

var 
  ch1: Char;   
  {Оператор объявления в 
   языке Object Pascal}
begin
ch1 := Chr(65);      
  { Оператор присваивания 
    задается символами :=}
end;
< Лекция 5 || Лекция 6: 123456 || Лекция 7 >
Александр Демьяненко
Александр Демьяненко

Можно ли сдавать один и тот же тест несколько раз?
Или же один и тот же тест можно сдать лишь однажды?

Максим Стогний
Максим Стогний

Добрый день!

Скажите, пожалуйста, если в терминологии объектно-ориентированного программирования функции также называются методами или методами - членами класса, в примере объявления указателя на метод использовали в формальном описании оба названия:

тип_метода (имя_класса::*имя_метода_указателя)
    (список параметров);
тип_функции (*имя_ функции_указателя)
    (список параметров);

при этом можно было  тип_функции во втором описании заменить на тип_метода? Т.е.:

тип_метода (*имя_ метода_указателя)
    (список параметров);