Явные объявления конструкторов

Если при объявлении конструктора указать слово explicit, то он тре­бу­ет, чтобы значения в операторах присваивания были пре­об­разованы к тому классовому типу, объектам которого эти значения присваиваются.

Примеробъявления класс X и его двух конструкторов:

class X {public: explicit X (int); explicit X (const char*, int=0);}; // класс X

void F(X prm) { X a=X(1); X b=X(«строка»,0); a=X(2); } // функция F

Непостоянные объявления

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

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

Пример непостоянного объявления переменной count:

class A // объявление класса А

{public: mutable int count; // непостоянное объявление переменной count

int F (int p=0) const // функция, у которой все переменные не изменяются

{ count=p+1; /* если убрать mutable, то была бы ошибка при компиляции:

константный объект не может быть изменен */return count;} // конец функ.

}; // конец класса

int main(int argc, char **argv) // основная функция

{ A a; cout << a.F(3) << endl; /* вывод числа 4 */ getch(); return 0; }

Быстрый вызов функций -_fastcall

Если при объявлении функции указать слово _fastcall, то компилятор зна­чения первых трех параметров будет передавать не через стек опе­ра­тивной памяти, а через процессорные регистры AX, BX, DX, что гараздо быстрее.

6.6.9. Блок обработки исключений try ‑ catch -_finally

Try

{<любой код, который может сгенерировать исключение > }

catch (T1 X1)

{ обработчик исключения X1 (п. 1.6.2) типа T1, которое было ранее сгене­рировано внутри предыдущего блока try }

...

catch (Tn Xn)

{ обработчик любого исключения предыдущего блока try }

[_finally

{ < код, выполняемый при любом варианте завершения блока try> } ]

Допускается вложенность блоков try. Все объекты исключения име­ют свойство Message, которое содер­жит текст с описанием исключения.

Пример исключения, возникающего при делении на ноль (п. 1.6.2):

void __fastcall TForm1::Button1Click(TObject *Sender) // функция

{ float a=1, b=0, c; // объявление переменных

try { c=a/b; } // блок try; при его выполнении возникнет исключение

catch (EZeroDivide &exeption)// обработка исключения EZeroDivide

{ Application->MessageBox(exeption.Message.c_str(),»Деление на ноль»,MB_ICONHAND|MB_OK); // вывод сообщения об ошибке

} // конец обработки исключения EZeroDivide (деление на ноль)

} // конец функции

 

Вопросы для самопроверки и контроля

Вопросы для самопроверки

1. Могут ли использоваться визуальные средства в консольных приложениях?

2. Различаются ли прописные и строчные буквы в С++?

3. Где можно указать перенос команды?

4. Можно ли присвоить начальные значения элементам массива при его объявлении?

5. Какие достоинства имеет использование перечислений (enum)?

6. Какая операция изображается в виде &&?

7. Если X=2 и Y=3+X++, то чему равны X и Y после выполнения?

8. Каково назначение оператора break?

9. Можно ли установить указатель файла на нужный байт?

10. Каково назначение конструктора класса?

11. Назначение виртуальных классов?

12. Можно ли присвоить числовое значение свойству caption?

13. Для чего предназначен блок обработки исключений try ‑ catch -_finally?

14. Что получится в результате разности дат?

 

Контрольные вопросы

1. Найдите ошибку в команде: char prompt [ ] = {«Ответ»}.

2. Можно ли использовать функции printf, scanf в не консольных приложениях?

3. Каково назначение оператора return?

4. Как оформляется аргумент, если его значение изменяется функцией?

5. Какая операция изображается в виде || (двух вертикальных черточек)?

6. Как изображается знак неравенства?

7. Если X=2 и Y=3+X--, то чему равны X и Y после выполнения?

8. Что означает запись вида a=*&b?

9. Каково назначение оператора continue?

10. Назначение деструктора класса?

11. Можно ли присвоить свойству Caption нетекстовое значение?

12. Что означает операция «::»?

13. Каково назначение директивы #include?

14. Что получится в результате, если к дате прибавить целое число?


Глава 7. Visual C++

В данном разделе приводятся начальные сведения по Visual C++, которые позволяют (с учетом ранее полученных знаний из предыдующих разделов данного учебника) составлять простые программы. Огра­ни­чим­ся крат­ким описанием основных управляющих элементов. Их свойства зада­ют­ся в окне свойств, вызываемом командой Properties контекстного меню.

Основные общие черты Visaul C++ и C++ Builder

· Используется один язык программирования C++.

· Имеется визуальная среда быстрой раз­­ра­ботки приложений.

· Существует много одинаковых классов и функций.

Основные отличия Visual C++ и C++ Builder

· Применяются другая библиотека классов MFC и более сложная, но гибкая технология использования классов, свойств и методов.

· При сохранении проекта создается папка с именем проекта.

· События реализуются через сообщения Windows.

· Объектам (полям ввода‑вывода, счетчикам) сопоставляются (наз­на­ча­ются) пере­менные, которые содержат значения этих объектов. Для передачи текущих значений объектов в эти переменные исполь­зуется фун­к­ция UpdateData(1) (UpdateData(); V=m_edit1) или DDX_<управля­ющий элемент> (DDX_Text(pDX, IDC_EDIT1, m_edit1)). Для инициализации объектов с исполь­зо­ва­нием значений этих перемен­ных (обратная операция по обно­­влению объектов на форме) применяется функция UpdateData(0) (m_edit1=«Ива­нов»; UpdateData(0);) или SetDlgItemText (<имя эле­мен­та>,<значение>) (SetDlgItemText (IDC_EDIT2, m_cpicok)).

· Объекту, включенному командой Insert ActiveX Control кон­тек­ст­ного меню, назначается объектная (Category Control) пере­менная. Значение свойства объекта устанавливается/читается мето­дом Set<имя свойства>(<значение>)/Get<имя свой­ст­ва>().

Пример использования свойства Caption ActiveX‑элемента Label (Microsoft Forms 2.0 Label):

CString m1;//объявление переменной, m_label1 ‑ объектная переменная

m1=m_label1.GetCaption(); //m1=значение свойства Caption объекта Label1

m_label1.SetCaption("Фамилия"); //установка значения свойства Caption

 








Дата добавления: 2016-03-22; просмотров: 562;


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

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.014 сек.