![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Создание классов и объектов
Оператор объявления класса имеет вид: class < имя класса>: [< режим доступа> ] < имя родительского класса> { [ private: < поля, методы, свойства и события, доступные только в классе> ] [ protected: < аналогичен private, и дополнительно доступный потомкам> ] [ public: < поля, методы, свойства и события, доступные всем > ] [ _published: < аналогичен public и изменяемый в Инспекторе Объектов> ] [ friend < дружественные функции> ] }; //окончание объявления класса Режим доступа задается словами: private /public (защищенные имена остаются защищенными, а общедоступные имена родительского класса недоступны/доступны в производном классе). По умолчанию имя родительского класса TObject (наиболее общий предопределенный класс). Класс наследует поля, свойства, методы и события своих предков и может их изменять или вводить новые. Объявления полей и методов в классе не отличаются от объявлений обычных переменных, процедур или функций. Объект объявляется в разделе переменных оператором вида: < имя класса> < имя объекта>; Доступ к полям, свойствам и методам объекта реализуется указанием имени объекта, стрелочки (->) и имени поля, свойства или метода. Пример задания значения свойству Caption объекта Button1: Button1-> Caption: =«Выход»; //надпись командной кнопки «Выход» Конструктор/деструктор ‑ специальные методы, создающие/уничтожающие объекты. Они отличаются от обычных методов следующими особенностями: имеют имя, совпадающее с именем своего класса (у деструктора перед именем указывается символ тильда «~»); автоматически вызываются компилятором; не имеют возвращаемого значения, не могут наследоваться, хотя могут вызываться из производного класса; по умолчанию имеют атрибут public; конструкторы не могут быть виртуальными. Конструкторы бывают трех типов: конструктор по умолчанию не имеет параметров, и при его явном отсутствии в классе создается автоматически компилятором; конструктор с параметрами позволяет в момент создания объекта вызывать различные функции и передавать им значения через параметры; конструктор копирования позволяет создавать новый объект путем копирования из другого существующего объекта этого класса (формирование динамических структур). Операция доступа к области действия (::) задается в виде: :: < имя глобальной переменной> или < имя класса> :: < имя функции> Первая форма позволяет обратиться к глобальной переменной, если она даже закрыта одноименой локальной переменной (:: x: =12.6). Вторая форма обозначает, что функция, хотя и определена вне указанного класса, является методом данного класса и существует в области действия этого класса (TForm1:: Button1Click(TObject *Sender)). Пример создания и использования классов: Circle (вывод данных о круге) и производного из него класса Cylinder (вывод данных о цилиндре). const double pi=3.14159265358979; // объявление константы pi class Circle // объявление класса Circle ‑ вывода радиуса и площади круга { protected: double r; // объявление переменной со значением радиуса круга public: // общедоступные методы и переменные класса Circle Circle(double rVal=0) // заголовок конструктора класса с параметром rVal : r(rVal) // при создании объекта Circle значению r присваивается rVal { } // пустое тело метода; можно было и так: Circle(double rVal=0){r=rVal; } void setRadius(double rVal) {r=rVal; } // метод установки значения r double getRadius() {return r; } // метод возвращения значения радиуса r double Area() {return pi*r*r; } // метод вычисления площади круга void showData(); // объявление метода вывода данных о круге }; // окончание объявления класса Circle // объявление производного класса Cylinder из класса Circle class Cylinder: public Circle // класс Cylinder выводит данные о цилиндре {protected: double h; //объявление переменной h‑ значение высоты цилиндра public: // общедоступные методы и переменные класса Cylinder Cylinder (double hVal=0, double rVal=0) // заголовок конструктора класса : h(hVal), // при создании объекта Cylinder значению h присваивается hVal Circle(rVal){ } // вызов конструктором класса Cylinder конструктора Circle void setHeight(double hVal) {h=hVal; } // метод установки значения h double getHeight () {return h; } // метод, возвращающий значение h // метод вычисления поверхности цилиндра. Circle:: Area() перезагружает //унаследованную функцию класса Circle для вычиcления площади //основания цилиндра. double Area() {return 2*Circle:: Area()+2*pi*r*h; } // площадь цилиндра void showData(); // объявление метода вывода данных о цилиндре }; // окончание объявления класса Cylinder void Circle:: showData() // заголовок метода в Circle вывода данных о круге {cout < < «Радиус круга = «< < getRadius()< < endl // вывод значения радиуса < < «Площадь круга = «< < Area()< < endl < < endl; // вывод площади круга } // конец метода Circle:: showData void Cylinder:: showData() // метод в Cylinderвывода данных о цилиндре {cout < < «Радиус основания = «< < getRadius() < < endl // вывод радиуса < < «Высота цилиндра = «< < getHeight() < < endl // вывод высоты < < «Площадь поверхности=«< < Area() < < endl; // вывод площади } // конец метода Cylinder:: showData int main(int argc, char **argv) // основная процедура тестирования классов {Circle circle(4); // создания объекта circle класса Circle (круг радиусом 4) Cylinder cylinder(9, 3); //создания объекта cylinder класса Сylinder (цилиндр) circle.showData(); // вывод данных о круге методом showData класса circle cylinder.showData(); // вывод данных о цилиндре методом cylinder.showData getch(); return 0; // остановка и завершение работы функции } // конец функции тестирования классов и объектов
|