АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

ИСХОДНЫЕ ТЕКСТЫ ПРИМЕРОВ

Читайте также:
  1. Задание и исходные данные
  2. Исходные данные
  3. Исходные данные
  4. ИСХОДНЫЕ ДАННЫЕ
  5. Исходные данные
  6. Исходные данные
  7. Исходные данные
  8. ИСХОДНЫЕ ДАННЫЕ
  9. ИСХОДНЫЕ ДАННЫЕ
  10. Исходные данные
  11. Исходные данные
  12. Исходные данные

 

(Листинг 8.1. исходный текст программы RECT.CPP

// Программа C++, иллюстрирующая использование класса.

// Программа моделирует прямоугольник.)

// Листинг 8.2. Исходный текст программы ARRAY.CPP

// Программа демонстрируюет использование конструкторов и деструкторов:

// - создает динамический массив (объект),

// - присваивает значения элементам динамического массива,

// - выводит значения элементов динамического массива,

// - удаляет динамический массив.

 

 

// Листинг 8.3. Исходный текст программы CIRCLE.CPP

// Простой пример иерархии классов.

 

 

// Листинг 8.4. Исходный текст программы VIRTUAL.CPP

// Программа демонстрирует использование виртуальных функций

// для моделирования квадратов и прямоугольников и вывода их

// размеров и площади

 

 

ВОПРОСЫ И ОТВЕТЫ

 

Что случится, если я объявлю конструктор по умолчанию, конструктор копии и другие конструкторы в защищенной области?

 

Программы, использующие ваш класс, не смогут создавать объекты этого класса. Однако они смогут объявлять классы-потомки с открытыми конструкторами.

 

Могу я задать цепочку вызовов функций-элементов?

 

Да, можете, только если указанные в цепочке функции-элементы возвращают ссылку на тот же самый класс. Например, если в классе String объявлены следующие функции-элементы:

 

String& upperCase();

String& reverse();

Stringa mapChar(char find, char replace);

 

вы можете написать следующий оператор обработки объекта класса

 

String:

s.upperCase().reverse().mapChar(' ', '+');

 

Что может случиться, если класс полагается на конструктор копии, созданный компилятором, и при этом класс использует указатели в качестве элементов-данных?

 

Эти конструкторы выполняют побитовую копию объекта. Следовательно, соответствующие элементы-указатели в обоих объектах будут ссылаться на те же самые динамические данные. Этот способ создания копии объекта - верный путь к различным неприятностям.

 

Могу ли я создавать массив объектов?

 

Да, можете. Однако соответствующий класс должен иметь заданный по умолчанию конструктор. При создании массива используется ранее упомянутый конструктор.

 

Могу ли я использовать указатель при создании объекта класса?

 

Да, можете, но в этом случае вы должны использовать операции new и delete, чтобы распределять и освобождать память для данного объекта.

Вот пример, использующий класс Complex. Не забудьте, что для обращения к элементам классов или структур используется операция ->, если вы ссылаетесь на них при помощи указателей.

 

Complex *pC;

pC = new Complex;

// операции с объектом, к которому обращаются по указателю pC

delete pC;

 

или

 

Complex *pC = new Complex;

// операции с объектом, к которому обращаются по указателю pC

delete pC;

 

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

 

1. Найдите ошибку в следующем объявлении класса:

 

class String {

char *str;

unsigned len;

String ();

String(const String& s);

String(unsigned size, char = ' ');

String(unsigned size);

String& assign(String& s);

~String();

unsigned getLen() const;

char* getString();

// другие функции-элементы

};

 

2. Найдите ошибку в следующем объявлении класса:

 

class String {

protected:

char *str;

unsigned len;

public:

String();

String(const char* s);

String(const String& s);

String(unsigned size, char = ' ');

String(unsigned size);

~String();

// другие функции-элементы

 

3. Верно или нет? Следующий оператор, который создает объект s класса String, объявленного ранее, является правильным:

 

s = String("Hello Borland C++");

 

4. Если в программе OPERATOR.CPP вы следующим образом измените объявления объектов, будет ли программа компилироваться без ошибок?

 

String s1 = String("Kevin");

String s2 = String(" Нау");

String s3 = s1;

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |

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



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.)