Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции C++.doc
Скачиваний:
7
Добавлен:
01.05.2025
Размер:
1.44 Mб
Скачать

2.7 Два новых типа данных

Просматривая список ключевых слов таблицы 2.1, можно заметить добавление двух новых встро­енных типов: bool и wchar_t. Тип данных bool предназначен для логических величин. Они могут принимать только два значения - true и false. Значения true и false также являются ключевыми словами и служат частью языка C++. При употреблении логических типов в нелогических выражениях они автоматически преобразуются к типу целых чисел. Хотя C++ определяет тип данных bool, он продолжает полностью поддерживать фундаментальную концепцию о том, что ненулевые целые числа соответствуют значению истина, а нулевое значение соответствует значению ложь.

Тип wchar_t поддерживает широкие символы, обычно являющиеся 16-битовыми значениями. Они обычно используются для представления набора букв в языках, для которых недостаточно 255 символов. Тип wchar_t поддерживается в С путем определения типа с использованием typdef. В C++ этот тип стал ключевым словом.

asm

inline

template

bool

mutable

this

catch

namespace

throw

class

new

true

const_cast

operator

try

delete

private

typeid

dynamic_cast

protected

typename

explicit

public

using

false

reinterpret_cast

virtual

friend

static_cast

wchar_t

Таблица 2.1. Ключевые слова C++

Глава 3. Классы и объекты

3.1 Параметризованные конструкторы

Конструкторам можно передавать аргументы. Обычно эти аргументы используются для того, чтобы помочь инициализировать создаваемый объект. Для того чтобы создать параметризированный конструктор, достаточно попросту добавить параметры, как это делается для любой другой фун­кции. При определении тела конструктора, т.е. кода, который реализует конструктор, эти пара­метры используются для инициализации объекта. Например, можно усовершенствовать класс queue, рассмотренный в конце предыдущей главы, путем передачи ему в качестве аргумента числа, слу­жащего идентификатором объекта. Объявление класса queue будет иметь следующий вид:

class queue

{

int q[100];

int s, r;

int who; // содержит идентификатор очереди

public:

queue(int id); // параметризированный конструктор

~queue(); // деструктор

void put(int i);

int get();

}

Переменная who используется для хранения значения идентификатора, служащего для иденти­фикации объекта типа queue. Его значение определяется аргументом id при создании объекта. Конструктор queue() будет выглядеть следующим образом:

queue::gueue(int id)

{

s = r = 0;

who = id;

cout << "Queue " << who << " initialized.\n";

}

Для передачи аргумента конструктору необходимо задать его значение при объявлении объек­та. C++ поддерживает два способа решения этой задачи. Первый из них выглядит следующим образом:

queue a = queue(101);

Здесь конструктор класса queue вызывается непосредственно с передачей ему значения 101. Значе­нием переменной а служит сам созданный объект.

Второй способ короче и более непосредственно ведет к цели. В этом методе аргумент или аргу­менты следуют за именем объекта в скобках. Следующая строка кода служит той же самой цели, что и предыдущее объявление объекта:

queue a(101);

Общая форма для передачи аргументов конструктору имеет следующий вид:

тип_класса объект(список_аргументов);

Здесь список_аргументов представляет собой список аргументов, разделенных запятыми. Эти аргументы и передаются конструктору.

Следующая программа демонстрирует передачу аргументов конструктору:

int main()

{

queue a(1), b(2); // создание двух объектов типа queue

a.put(10); a.put(20);

b.put(19); b.put(1);

cout << a.get() << " ";

cout << a.get() << " ";

cout << b.get() << " ";

cout << b.get() << "\n";

return 0;

}

Эта программа выводит следующий текст:

Queue 1 initialized.

Queue 2 initialized.

10 20 19 1

Queue 2 destroyed.

Queue 1 destroyed.

Посмотрев на функцию main(), мы увидим, что объект а имеет в качестве идентификатора 1, а объект b - 2.

Хотя в данном примере при создании объекта ему передается только один аргумент, можно передавать также и несколько аргументов. Например, в следующей программе объектам типа pair передаются два значения:

#include <iostream.h>

class pair

{

int i;

int j;

public:

pair(int a, int b);

void put();

}

pair:: pair(int a, int b)

{

i = a;

j = b;

}

void pair::put()

{

cout << i << " " << j << "\n";

}

int main()

{

pair x(10, 20), y(0, 0);

x.put();

у.put();

return 0;

}

Эта программа выведет на экран значения

10 20

0 0