Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Основы программирования на C++.doc
Скачиваний:
148
Добавлен:
02.05.2014
Размер:
872.96 Кб
Скачать

Вопросы и ответы

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

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

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

Да, можете, только если указанные в цепочке функции-элементы возвращают ссылку на тот же самый класс. Например, если в классе 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;