Отвечаю на письмо, отправленное в личку, TAPAKAHом. Может кому и пригодится РАЗЖОВЫВАЮ, ЧТО ТАКОЕ КОНСТРУКТОР И ДЕСТРУКТОР!
Ну там все просто. В конструкторе пишетутся конструкции объектов, а в деструкторе пишутся удаление этих объектов.
Вот пример:
Code
//Создадим класс
class a
{
private: //локально для класса (привратно)
int x;
int y;
SObject *obj; //Некий нужный объект
char *name; //Для имени
public: //А после этого оператора, функции и переменные становятся доступными
a(); //Первый конструктор
a(int _X, int _Y); //Второй конструктор (То есть можно спокойно создавать до нескольких
//вариантов функций, где разница будит только в определении вгружаемых значений, или
//выводного значения *return*)
//Некие функции...
~a(); //А это деструктор. Он вызывается автоматически оператором delete, либо
//можно вызвать из объекта.
};
a::a()
{
obj = new SObject(); //Создаем условный объект
name = new char[50]; //Выделяем память для строки с именем
x = y = 0; //Устанавливаем некие стандартные координаты
}
//Вариант второй конструктора
a::a(int _X, int _Y)
{
//Здесь может быть практически тоже, но с легкой разницой.
obj = new SObject(); //Создаем условный объект
name = new char[50]; //Выделяем память для строки с именем
x = _X; //В данном случае, этот конструктор устанавливает
y = _Y; //Введенные из вне координаты. Иногда удобно прибегать к
//Такому варианту строения конструкторов.
}
//Теперь деструктор
a::~a()
{
//В нем может быть любой код, но главная задача его - удалить
//из памяти все, что связано с объектом.
delete obj; //Удаляем некий объект
delete [] name; //Удаляем массив имени
//Иногда, при удалении, строка: delete [] name может вызывать
//Ошибку. В таком случае можно убпать квадратные скобочки.
//delete name
//И такой случай будит работать.
}
Поэксперементируй. Просто в теле деструктора впеши вызов Message. При удалении объекта, сообщение должно вылазить.
На счет конструкторов - добавлю. Он вызывается оператором new. С примером класса а, можно сделать так:
Code
void main()
{
a * ob1 = new a(); //Создается объект, используя стандартные значения.
//В этом случае x и y будут иметь значение нуля.
a * ob2 = new a(10,20); //В этом случае, x будит равен 10, а y равен 20
a * ob3 = new a(&ob1); //А этот вариант создаст копию объекта ob1.
//...
}
Кстати & - необязателен. Но при его использовании, некоторые значений, переменные, классы и т.д. (в данном случае ob1) не смогут меняться внутри тела функции. (этот & можно использовать практически в любой функции.)
Ну вроде все... Разжувал, как смог.