Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VC_Lect.doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
15 Мб
Скачать
☆

Предисловие автора

Часть 1 этого документа относится как к курсу «Инструментальные средства визуального программирования» и «Современные технологии и инструментарий программирования», так как в ней не затрагивается технология СОМ. Ранее конспект лекций по курсу «Инструментальные средства визуального программирования» (читается с осени 2008г. для 3-го курса) я распространял в файле с именем ISVP_Lec.doc, но с декабря 2008г. я его прекращаю обновлять. Весь материал, который прежде был в файле ISVP_Lec.doc, теперь присутствует в этом файле.

Часть 2 этого документа относится в основном к курсу «Современные технологии и инструментарий программирования» (читается для 5-го курса), так как в ней освещается технология СОМ. Ранее конспект лекций по этому курсу я распространял в файле с именем VCLectures.doc, но с декабря 2008г. я его прекращаю обновлять и далее размещаю новый материал в этом документе и в него же вношу исправления. Весь материал, который прежде был в файле VCLectures.doc, теперь присутствует в этом файле.

Теперь о версиях Microsoft Visual Studio. По состоянию на декабрь 2008г. весь материал относился к версии Microsoft Visual Studio 6.0. Далее, т.е. с января 2009г., в рамках курса «Современные технологии и инструментарий программирования» предполагается переход на версию Microsoft Visual Studio 2005. Так как и в рамках версии Microsoft Visual Studio 2005 пока предполагается разрабатывать приложения без использования Microsoft .NET Framework, то излагаемый материал практически инвариантен по отношению к версиям Microsoft Visual Studio. Фактически, отличия начинаются только там, где речь идет не о языке, а об интегрированной среде Microsoft Visual Studio. Я постараюсь подчеркивать эти отличия, но не могу гарантировать что у меня хватит терпения и внимания к отслеживанию всех отличий.

С осени 2011г. в рамках курса «Инструментальные средства визуального программирования» используется версия Microsoft Visual Studio 2008, она же будет использоваться и в курсе «Современные технологии и инструментарий программирования». Отличия версии 2008 от 2005 менее существенны, чем отличия 2005 от MVS 6.0.

С осени 2015г. в рамках курсов «Объектно-ориентированное программирование», «Инструментальные средства визуального программирования» используется версия Microsoft Visual Studio 2010, она же будет использоваться и в курсе «Современные технологии и инструментарий программирования». Отличия версии 2010 от 2008 не очень существенны.

С уважением В.Н.Овсянник

Часть 1. Программирование на Visual C++

1.Классификация и характеристика типов данных C++

1.1.Классификация типов данных C++

В настоящее время (2008г.) действует стандарт языка С++ ISO/IEC 14882, утвержденный рабочей группой JTC1/SC22/WG21. Он был опубликован впервые в 1998г. и доработан в 2003г. Неформально этот стандарт известен как C++98. Рабочая группа WG21 в настоящее время (осень 2008г.) работает над новой версией стандарта, которую предполагается опубликовать в 2009г. под предварительным именем (label в оригинале) C++0x. Далее в этом документе под стандартом языка будет подразумеваться именно C++98.

Классификация типов данных стандарта языка С++ представлена на рис.1.

Рис. 1. Классификация типов данных языка С++

Фундаментальные типы называют еще базовыми или основными. Тип void (пустой) является специфическим в том смысле, что данных этого типа не существует и не может быть, но, вместе с тем, можно описать указатель на тип void, который будет «указателем вообще» (как тип pointer в языке Паскаль), т.е. не будет ассоциирован с каким-либо конкретным типом, имеющим диапазон значений и др. атрибуты. Если тип функции описан как void, то это значит, что функция не возвращает никакого значения, т.е. является процедурой по терминологии языка Паскаль или Subroutine в языке Fortran.

1.2.Краткая характеристика типов данных C++

В табл. 1 приведены характеристики типов данных языка C++ (стандарт С++ и версия С++, используемая в MVS-2005).

Таблица 1

Характеристики типов данных стандарта С++ и для компилятора MVS-2005

Имя типа

Байт

Другие имена

Диапазон значений

Примечание

Булевский тип

bool

*

-

false, true

1 байт в MVS-2005

Символьные типы

char

1

signed char

–128..127

unsigned char

1

-

0..255

wchar_t

2

__wchar_t,

WCHAR (в Windows)

0..65535

для задания констант этого типа надо использовать префикс L, например, L’a’, L”abc”

Целочисленные типы

int

*

signed, signed int

Зависит от ОС

4 байта в MVS-2005

unsigned int

*

unsigned

Зависит от ОС

4 байта в MVS-2005

__int8

1

char, signed char

–128..127

Специфично для MS

__int16

2

short, short int, signed short int

–32 768..32 767

-//-

__int32

4

signed, signed int

–2 147 483 648..2 147 483 647

-//-

__int64

8

-

-9 223 372 036 854 775 808 .. 9 223 372 036 854 775 807

-//-

short

*

short int, signed short int

Зависит от ОС

2 байта в MVS-2005

–32 768..32 767

unsigned short

*

unsigned short int

Зависит от ОС

2 байта в MVS-2005

0..65 535

long

*

long int, signed long int

Зависит от ОС

4 байта в MVS-2005

–2 147 483 648..2 147 483 647

unsigned long

*

unsigned long int

Зависит от ОС

4 байта в MVS-2005

0..4 294 967 295

long long

8

signed long long int

-9 223 372 036 854 775 808 .. 9 223 372 036 854 775 807

Специфично для MS

unsigned long long

8

unsigned long long int

0..18446744073709551615

Специфично для MS

Перечисления

enum

*

-

Такой же, как и int

Вещественные типы

float

4

-

3.4E-38.. 3.4E+38 (7 значащих цифр)

double

8

-

1.7E-308..1.7E+308 (15 значащих цифр)

long double

10

-

1.2E-4932..1.2E+4932 (19 значащих цифр)

в MVS-2005 трактуется как double, но типы double и long double все же разные

Символ * в столбце таблицы «байт» означает, что размер памяти, занимаемый типом данных, в стандарте языка не определен. Касательно интегральных и вещественных типов в стандарте языка заданы следующие соотношения:

1==sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(float) <= sizeof(double) <= sizeof(long double)

При этом не предполагается, что символьный тип char действительно занимает 1 байт памяти – просто его размер принимется за единицу.

Как видно из таблицы, взятой из MSDN MVS-2005, в Visual C++ начиная с версии 5.0 тип bool имеет размер 1 байт, в то время как в предыдущих версиях он занимал столько же байт памяти, сколько и тип int.

Данные типа long double в системах Windows NT и Windows 95 преобразуются к типу double.

Модификаторы signed и unsigned могут применяться к любому интегральному типу. Тип char по умолчанию знаковый, но его можно сделать беззнаковым с помощью ключа компилятора /J. Этот ключ (J – прописная буква!) надо указывать, как и другие ключи, в поле Project Options на вкладке C/C++ окна Project Settings, вызываемого с помощью команды Project|Project Settings.

Типы int и unsigned int имеют размер, зависящий от системы: 2 байта в MS-DOS и 16-битовых версиях Windows и 4 байта в 32-битовых ОС. Таким образом, чтобы программный код был переносимым, он не должен зависеть от размера типа int. Это значит, например, что нигде в программе Вы не должны предполагать, что тип int имеет размер 2, 4 или 16 байт. Более того, как и во многих других случаях, Вам удастся избежать многих неприятностей, если Вы вообще не будете использовать в программе «магические» числовые константы. Например, в нынешнее время тип char занимает пока еще 1 байт памяти, но, очевидно, совсем скоро он станет (по умолчанию!) занимать два байта в связи с повсеместным распространением кодировки Unicode. То же относится и к другим типам. Например, в версии компилятора Borland C++ 3.1 тип int занимает два байта памяти, а в Visual C++ 6.0 и MVS-2005 – уже четыре байта.

В файле Limits.h определены константы, задающие предельные значения для интегральных типов. Смотрите.

В Windows SDK и MFC определены и используются и другие многочисленные имена как для базовых типов, так и для производных (см. раздел этого документа «Соглашения об именах», а также раздел MSDN “Windows Data Types”). Имена типов, определенные в Windows, записываются с использованием заглавных букв, например, TCHAR, BOOL, BOOLEAN и т.п.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]