03.06.2007, 23:20
общий
это ответ
Здравствуйте, Pesick!
1. Во-первых, согласно основным принципам ООП доступ к закрытым членам предоставлять нежелательно (только в крайнем случае). Но управлять закрытыми членами можно через функции интерфейса (открытые функции), как сделано у другого эксперта.
2. Такая реализация необходима для определения того, что передавать в конструкторы членов класса и базового класса и для перехвата исключений, сгенерированных в этих конструкторах. Кроме того можно просто установить доступ к конструктору по умолчанию как private (например, для паттерна Одиночка).
3. Если вы не хотите разрешить создание объекта извне. Но для этого придется также объявить оператор operator= и копирующий конструктор закрытыми.
4. Такая возможность была специально убрана из С++ из-за синтаксических трудностей. Поэтому этого сделать невозможно (такого оператора нету и его нельзя создать). Для возведения в степень рекомендуется вызывать функции, а не перегружать операторы.
5. К ответу предыдущего эксперта добавлю: Если класс порожден от базового абстрактного класса и не перегрузил его чисто виртуальные функции (кроме деструктора, поскольку в случае необходимости компилятор его создает сам), то и он является абстрактным классом.
6. Можно задать к чисто виртуальной функции реализацию и вызывать ее из классов-потомков. Пример:
class A{
pubilc:
virtual int f() = 0 { return 5; }
};
class B: public A{
public:
virtual int f() { return A::f(); }
};
В этом смысле использование виртуальных функций возможно. Но нельзя создать объект абстрактного класса (кроме указателей и ссылок), поэтому извне эти функции нельзя использовать.
7. Начинаем с середины (с имени переменной t) и идем направо:
середина: t - это..., направо: ...функция с аргументом int..., налево: ...возвращающая указатель на..., направо: ...функцию с агрументом int*..., налево: ...возвращающую int.
Так читаются любые такие конструкции.
Посоветую книгу Философия С++, там разобраны все эти вопросы и еще много других.