|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
ИСХОДНЫЕ ТЕКСТЫ ПРИМЕРОВ
(Листинг 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;
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.) |