    Листинг 12.1 WELCOME.CPP (программа на C++)

    #include <iostream.h>

    main() {
       cout << "Welcome to Borland C++ programming!  \n"
        return 0 ;
    }


    Листинг 12.2.  COMMENTS.CPP (сравнение типов комментариев ANSI С и C++)

    1:     #include <iostream.h>
    2:
    3:     // ----------------------------------------------------------------------------------
    4:     // Автор : Том Сван
    5:     // Версия : V1.0
    6:     // Назначение :  Демонстрация комментариев в C++
    7:     // ----------------------------------------------------------------------------------
    8:
    9:     main()
    10:    {
    11:    cout << "A Brief C++ Commentary\n"; // Вывести заголовок
    12:    cout << "\n"; // Вывести пустую строку после заголовка
    13:
    14:    /* Этот абзац демонстрирует, что комментарий на языке С может
    15:    занимать более одной строки.
    16:    Комментарий на C++ ограничен одной строкой. */
    17:
    18:    cout << "// This is not a comment.\n\n"; // Это комментарий
    19:    cout << "/* This also is not comment.*/ \n\n";
    20:    cout /* Это комментарий. */ << "This text is displayed.\n";
    21:    return 0;
    22:    }


    Листинг 12.3.  FILTER.CPP (простая программа-фильтр на C++)

    1:	#include <iostream.h>
    2:
    3:	main()
    4:	{
    5:	  char с;
    6:
    7:	  while (cin.get(c))
    8:	     cout.put(c);
    9:	  return 0;
    10:	}


    Листинг 12.4.    GETVAL.CPP (использование библиотеки потоков ввода-вывода
для чтения данных встроенных типов)

    1:	#include <iostream.h>
    2:	#include <stdlib.h>
    3:
    4:	void test(void);
    5:
    6:	main()
    7:	{
    8:	  double fp;  // Вещественное значение
    9:	  long k;  // Длинное целое 10:
    11:   cout << "Enter a floating-point value:   ";
    12:   cin >> fp;
    13:	  test();
    14:   cout << "Value entered is:   " << fp <<  '\n';
    15:   cout << "Enter an integer value:   ";
    16:   cin >> k;
    17:	  test();
    18:   cout << "Value entered is:   " << k <<  '\n';
    19:	  return 0;
    20:	}
    21:
    22:	void test(void)
    23:	{
    24:   if (!cin.good()) {
    25:     cout << "Error detected";
    26:	    exit(1);
    27:	  }
    28:	}

    Листинг 12.5.  GETSTR.CPP (использование потоковой библиотеки дл
безопасного чтения строк)

    1:	#include <iostream.h>
    2:
    3:	main()
    4:	{
    5:	  char s[25];
    6:	  char c;
    7:
    8:    cout << "Enter a 24-char string safely: \n";
    9:	  cin.get(s, 25, '\n');
    10:   cout << "You entered:  " << s << An';
    11:	  if (cin.get(c) && с != \n')
    12:     cout << "Maximum line length reached\n";
    13:	  return 0;
    14:	}


    Листинг 12.6. CONVERT.CPP (использование форматного вывода в потоках ввода-вывода)

    1:	#include <iostream.h>
    2:	#include <stdlib.h>
    3:
    4:	#define SIZE 35
    5:
    6:	main()
    7:	{
    8:	  int value;
    9:	  char s[SIZE];
    10:
    11:   cout << "Value? ";
    12:	  cin.get(s, SIZE, '\n')
    13:	  value = atoi(s);
    14:   cout << "Decimal=" <<   dec << value
    15:   << "Hexadecimal=0x" <<  hex << value
    16:   << "Octal=0" << oct <<   value << '\n' ;
    17:	  return 0;
    18:	}


    Листинг 12.7.  CONVERT2.CPP (альтернативный вариант форматного вывода)

1:    #include <iostream.h>
2:    #include <stdio.h>
3:    #include <stdlib.h>
4:
5:    #define SIZE 35
6:
7:    main()
8:    {
9        int value;
10:      char s[SIZE];
11:      char buffer[80];
12:
13:      cout << "Value? ";
14:      cin.get(s, SIZE, '\n');
15:      value = atoi(s);
16:      sprintf(buffer,"Decimal=%d Hexadecimal=%#x Octal=%#o\n"
17:      value, value, value);
18:      cout << buffer;
19:      return 0;
20:   }


    Листинг 12.8. SCOPE.CPP (использование оператора разрешения видимости)

    1:    #include <iostream.h>
    2:
    3:    int k = 100; // Глобальная переменна
    4:
    5:    main()
    6:    {
    7:
    8:         int i = 200; // Локальная переменна
    9:         cout << "Global k == " << k << '\n';
    10:       cout << "Local i == " << i << '\n';
    11:       {
    12:	    int k = 300;
    13      cout << "Local k == " << k << '\n';
    14:     cout << "Global k == " << ::k << '\n';
    15:      }
    16:      return 0;
    17:   }


    Листинг 12.9.  INLINE.CPP (демонстрация встраиваемых функций)

    1:   #include <iostream.h>
    2:
    3:  inline int max(int a,   int b)
    4:         {
    5:            if (a >= b)
    6:                 return a;
    7:             else
    8:                return b;
    9:          }
    10:
    11:	main()
    12:	{
    13:	  int х, у, z;
    14:
    15:   cout << "X? ";
    16:   cin >> x;
    17:   cout << "Y? ";
    18:   cin >> y;
    19:	  z = max(x, У);
    20:   cout << "max(a, b) == " << z << '\r\';
    21:	  return 0;
    22:	}


    Листинг 12.10.  MEHERR.CPP (демонстрация new и ошибок,  связанных с
нехваткой памяти)

    1:	#include	<iostream.h>
    2:	#include	<new.h>
    3:	#include	<stdlib.h>
    4:
    5:	struct q	{
    6:	  int ia[1024]; // 2048-байтовая структура
    7: 	};
    8.
    9:	main()
    10:	{
    11:	struct q	*qp; // Указатель на структуру q
    12:
    13:	set new handler(O); // Указание new вернуть О в случае неудачи
    14:	for (;;)  { // Повторять следующий оператор "без конца"
    15:	   qp = new q; // Выделить новую структуру типа q
    16:    cout <<       qp, << ' \n ' ; //, Вывести адрес структуры
    17:	   if (qp == 0) { // В случае возврата new 0 следует:
    18:       cout << "Out of memory\n"; // Вывести сообщение об ошибке
    19:	     exit(1);	// Прервать программу с кодом завершения 1
    20:	  }
    21:	}
    22:	return 0	;// В этой строке выдается предупреждение "unreachable code"
    23:	}


    Листинг 12.11. NEWSTR.CPP (объявление строк с помощью new)

    1:	#include <iostream.h>
    2:
    3:	#define SIZE 80
    4:
    5:	main()
    6:	{
    7:
    8.	  char *sp
    9:	  sp = new char[SIZE];
    10;   cout <<        "String?";
    11:	  cin.getlinefsp, SIZE);
    12:   cout << "You entered:" << sp << '\n';
    13:	  delete[]	sp;
    14:	  return 0
    15:	}


    Листинг 12.12. NEWARRAY.CPP (объявление массивов с помощью new)

     1:     #include <iostream.h>
     2:
     3:     #define COUNT 100 // Количество целых значений
     4:
     5:     main()
     6:     {
     7:     int *array; // Массив целых значений
     8:     int i; // Индекс массива
     9:
    10:     array = new int[COUNT];
    11:
    12:     // Заполнение массива
    13:     for (i = 0;  i < COUNT;  i++)
    14:     array[i] = i;
    15:
    16:     // Вывод содержимого массива
    17:     for (i = 0;  i < COUNT;  i-н-) {
    18:       cout.width(e);
    19:       cout << arrayfi];
    20:     }
    21:     delete[] array;
    22:     return 0;
    23:     }


    Листинг 12.13.  OVERLOAD.CPP (перегрузка функций)

    1:      #include <iostream.h>
    2:
    3:      int square(int a);
    4:      double square(double a);
    5:      long double square(long double a);
    6:
    7:      main()
    8:      {
    9:      int x = 10;
    10:     double у = 20.5;
    11:     long double z = 30.75;
    12:
    13:     cout << square(x) << '\n';
    14:     cout << square(y) << '\n';
    15:     cout << square(z) << '\n';
    16:     return 0;
    17:     }
    18:
    19:     int squarefint a)
    20:     {
    21:     return a * a;
    22:     }
    23:
    24:     double square(double a)
    25:     {
    26:     return a * a;
    27:     }
    28:
    29:     long double square(long double a)
    30:     {
    31:     return a * a;
    32:     }


    Листинг 12.14.  CENTER.CPP (использование аргументов функции по умолчанию)

    1:      #include <iostream.h>
    2:      #include <string.h>
    3:
    4:      #define SIZE 128
    5:
    6:      void Center(const char *instr, char *outstr,
    7:                           int width = 0, char IFill = '-', char rFill = '-');
    8:
    9:      main()
    10:     {
    11:     char instr[SIZE]; // Вводимая строка
    12:     char outstr[SIZEJ; // Выводимая строка
    13:     int length; // Длина строки в символах
    14:
    15:     cout << "Enter a string:";
    16:     cin.getline(instr, SIZE / 2);
    17:     length = strlen(instr);
    18:
    19:     Center(instr, outstr);
    20:     cout << outstr << '\n';
    21:     Center(instr, outstr, length + 8);
    22:     cout << outstr << '\n';
    23:     Center(instr, outstr, length + 16, '*', '*');
    24:     cout << outstr << '\n';
    25:     Center(instr, outstr, 78, '<', '>');
    26:     cout << outstr << '\n';
    27:
    28:     return 0;
    29:     }
    30:
    31:     // instr: Указатель на входную строку
    32:     // outstr: Указатель на выходную строку
    33:     // width: Окончательная желаемая длина выходной строки
    34:     // fill: Символ для заполнения выходной строки
    35:
    36:     void Center(const char *instr,  char *outstr,
    37:                           int width, char IFill, char rFill)
    38:     {
    39:     if (outstr == 0) // Выходная строка не должна быть нулевой
    40:        return;           // Если нулевая - немедленное возвращение
    41:
    42:     if (instr == 0) { // Если входная строка нулевая,
    43:          *outstr = 0; // Выводим пустую строку
    44:                             // и возвращаемся. }
    45:          return;
    46:     }
    47:     // Вычисление .переменных для заполнения выходной строки
    48:	int len = strlen(instr);
    49:	if (width < len)
    50:	   width = len;
    51:	int wd2 =	(width - len) / 2;
    52:
    53:	int i; //	Индекс строки и	управляющая переменная для цикла for
    54:
    55:	for ( i = 0; i < wd2; i++)
    56:	   outstr[i]	= IFill;
    57:	for ( /*i= i*/; i < wd2 +	len; i++)
    58:	   outstr[ij	= instr[i - wd2]	•
    59:	for (/*i	= i*/; i < width;	i++)
    60:	   outstr[i]	= rFill;
    61:	outstr[i]	= 0; // Завершаем строку нулем
    62:	}


    Листинг 12.15. REFVAR.CPP (демонстрация ссылочных переменных)

    1:     #include <iostream.h>
    2:
    3:     main()
    4:	{
    5:	int ivar = 1234;	// Переменной присвоено значение
    6:	int *iptr = &ivar	;    // Указателю присвоен адрес ivar
    7:	int &iref = ivar;	// Ссылка ассоциирована с ivar
    8:	int *p = &iref;	// Указателю присвоен адрес iref
    9:
    10: cout << "ivar == " << ivar << '\n' ;
    11: cout << "*iptr ==        " << *iptr << '\n' ;
    12: cout << "iref == " << iref << '\n';
    13: cout << "*p == " << *p << '\n' ;
    14:	return 0;
    15:	}


    Листинг 12.15. REFVAR.CPP (демонстрация ссылочных переменных)

    1:     #include <iostream.h>
    2:
    3:     main()
    4:	{
    5:	int ivar = 1234;	// Переменной присвоено значение
    6:	int *iptr = &ivar	;    // Указателю присвоен адрес ivar
    7:	int &iref = ivar;	// Ссылка ассоциирована с ivar
    8:	int *p = &iref;	// Указателю присвоен адрес iref
    9:
    10: cout << "ivar == " << ivar << '\n' ;
    11: cout << "*iptr ==        " << *iptr << '\n' ;
    12: cout << "iref == " << iref << '\n';
    13: cout << "*p == " << *p << '\n' ;
    14:	return 0;
    15:	}


    Листинг 12.16. ТАХ.СРР (использование ссылок в качестве параметров функции)

    1: #include <iostream.h>
    2:
    3: #include <stdlib.h>
    4: #include <stdio.h>
    5;
    6: double GetDouble(const char *prompt);
    7: void GetData(double Spaid, double irate);
    8: void Calculate(const double paid, const double rate,
    9;  double &list, double &tax);
    10:
    11: main ()
    12: {
    13:  double paid, rate, list, tax;
    14:  GetData(paid, rate);
    15:  Calculate(paid, rate, list, tax);
    16:  printf('List pride = $%8.2f\n", list);
    17:  printf("Tax paid = $%8.2f\n", tax);
    18:  return 0;
    19: }
    20:
    21: // Возвращает одно вещественное значение двойной точности
    22: double GetDouble(const char *prompt)
    23: {
    24:  char s[20]; // Строка для ввода
    25:  printf (prompt); // Отображение строки запроса
    26:  scanf ("%20s", s); // Ввести данные как строку
    27:  return atof(s); // Возвратить введенные данные
    28:  }
    29:
    30:	// Ввод цены и ставки налога вещественными значениями двойной точности
    31:	// Замечание: изменяет значение paid и rate
    32:	void GetData(double &paid, double &rate)
    33:	{
    34:	paid = GetDouble("Price paid?");
    35:	rate = GetDouble("Tax rate (ex: .06)?");
    36:	}
    37:
    38:	// Вычисляет цену и налог по сумме и ставке
    39:	// Замечание: изменяет значение list и tax
    40:	void Calculate(const double paid, const double rate,
    41:	                           double &list, double &tax)
    42:	{
    43:	list = paid / (1 + rate);
    44:	tax = paid - list;
    45:	}


    Листинг 12.17.   REFFUNC.CPP (ссылочные функции)

    1:	&include <iostream.h>
    2:	&include <stdlib.h>
    3:	&include <string.h>
    5:	&define FALSE 0
    6:	&define TRUE 1
    7:	&define SIZE 10
    8:	&define BUFLEN 20
    9:
    10:	double &ref(int index);
    11:	void ShowArray(void); 12:
    13:	double array[SIZE]; 14:
    15:	main()
    16:	{
    17:	int done = FALSE, index;
    18:	char buffer[BUFLEN];
    19:
    20:	for (index = 0; index < SIZE; index++)
    21:	   ref(index) = index; // Присваивание ссылочной функции!
    22:	while (Idone) {
    23:	  ShowArray();
    24:   cout << "\nEnter index from 0 to 9, Enter to quit:";
    25:	  cin.getline(buffer, BUFLEN);
    26:	  done = (strlen(buffer) ==0);
    27:	  if (Idone) {
    28:	    index = atoi(buffer);
    29:     cout << "Enter floating-point value:";
    30:	    cin,getline(buffer, BUFLEN);
    31:	    ref(index) = atof(buffer);
    32:	  }
    33:	}
    34:	return 0;
    35:	}
    36:
    37:	double &ref(int index)
    38:	{
    39:	  if ((index < 0) | | (index >= SIZE))
    40:	    index = 0;
    41:	  return array[index]; //	Вернуть ссылку на элемент массива
    42:	}
    43:
    44:	void ShowArray(void)
    45:	{
    46:   cout << "\nArray :\n";
    47:	  for (int i = 0; i < SIZE ; i++)
    48:      cout << "[" << i << "] == " << array[i] << '\n';
    49:	}

