Генерация мира. Нужны ответы
|
|
Saitei | Дата: Вторник, 11 Сентября 2012, 22:02 | Сообщение # 41 |
старожил
Сейчас нет на сайте
| Fade, ну это понятно а сам код?
|
|
| |
TimKruz | Дата: Вторник, 11 Сентября 2012, 23:36 | Сообщение # 42 |
старожил
Сейчас нет на сайте
| Quote (Saitei) Кто-нибудь поведает мне прелести ООП, а именно - супер-классы и дочерние классы? Что за суперклассы - не знаю, возможно, под этим подразумевается один из начальных классов... Например, в Delphi все классы берут начало от TObject, который содержит в себе только конструктор, деструктор (вроде бы всё абстрактное, точно не помню) и ещё что-то самое необходимое. А дочерние - это те, которые созданы на основе родительских. Типа так: Code TКласс1=class x:byte; end; ТКласс2=class(ТКласс1) бла:бла; procedure бла; end; При этом класс ТКласс2 наследует всё, что имел ТКласс1 (за исключением приватных переменных и процедур, которые доступны только самому ТКласс1). В данном случае ТКласс2 - дочерний, а ТКласс1 - родительский. Quote (Saitei) И какую роль играет конструктор класса? Инициализирует новый экземпляр класса, выделяет память под данные и процедуры и выполняет то, что нужно для нового экземпляра конкретного класса (например, для класса ТКласс1 нужно задать начальное значение x=3 - это нужно сделать именно в конструкторе). А деструктор, соответственно, уничтожает экземпляр, высвобождая память (и совершая другие действия, которые требуется для при удалении экземпляра конкретного класса, например, обнуляя фрагменты памяти, если, скажем, нужно почистить "секретные" данные). Quote (Saitei) Функция класса работает через другую функцию другого класса? Всё зависит от конкретной ситуации, как там они связаны между собой.
|
|
| |
x-and1988 | Дата: Среда, 12 Сентября 2012, 00:20 | Сообщение # 43 |
постоянный участник
Сейчас нет на сайте
| суперкласс = родительский класс. при обращении к функции, которая есть и в дочернем классе и в родительском, а вызвать надо родительский метод - используется конструкция super.вашМетод(); Сдается мне, что посты пошли уже не по теме...
Изучаю Java My new project My old project
|
|
| |
Archido | Дата: Среда, 12 Сентября 2012, 04:24 | Сообщение # 44 |
Сэнсэй
Сейчас нет на сайте
| Quote (TimKruz) Инициализирует новый экземпляр класса, выделяет память под данные и процедуры Не совсем так. Под процедуры память никто не выделяет, ибо ф-ции класса - это на самом деле совершенно "обычные" ф-ции первым параметром у которых неявно идет указатель на класс (this, он используется только для доступа к данным класса), который вызывает эту ф-цию. Т.е. они создаются на этапе компиляции и никто под них ничего не выделяет.
Кто на С++ успел много граблей пособирать , возможно знает вот такой забавный момент: Code struct TestClass { int Data;
void ShowMessage(const char* Text) { MessageBox(0, Text, "Test", 0); } };
...
int main() {
TestClass* Class = NULL; Class->ShowMessage("zabavno");
return 0; } Это код вполне успешно выполнится и сделает свою работу
Да и еще можно кое-что добавить к конструкторам - если используются виртуальные ф-ции в классах, то в данных этого класса появится неявный указатель на таблицу виртуальных функций и его ессно нужно как-то инициализовать и правильно настроить (на таблицу нужно класса, т.к. у каждого она своя) - этим конструктор тоже занимается. Но пока, наверное, это слишком сложно. Автору еще раз книжки читать
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |