|
Программирование >> Программирование на языке c++
компоненты-функции без спецификатора const нельзя вызывать для объектов со спецификатором const (при таком вызове компилятор выдает либо предупреждение, либо ошибку); >- компоненты-функции со спецификатором const не могут изменить значение компонента объекта без явной записи указателя this (см. последний пример). 3.4. Инициализация объекта (конструкторы) Использование функций, подобных рассмотренным выше set string и set, для установки начальных значений компонентам-данным объекта (для инициализации объекта) неестественно и часто приводит к ошибкам (например, можно забыть проинициализировать объект или сделать это многократно). В связи с этим введена специальная функция, позволяющая инициализировать объект в процессе его объявления. Поскольку эта функция назначает начальные значения компонентам и по-английски это звучит как а function constructs values , то она названа конструктором (от англ. constructor ). Функция конструктор имеет то же имя, что и соответствующий класс. Ниже приведен пример использования конструктора для рассмотренного в § 3.1 класса string. class string { char str[25]; public: string (char* s) { strcpy(str,s); } это конструктор другие функции класса Конструктор может иметь и не иметь аргументы и он никогда не возвращает значения (даже типа void). В нашем примере конструктор с именем string имеет один аргумент. Класс может иметь несколько конструкторов, что позволяет использовать несколько различных способов инициализации соответствующих объектов. Рассмотрим пример: class my class { int a,b,c; public: my class{void); a,b и с получают некоторые предопределенные значения (значения, заданные по умолчанию) my class(int); а - явное значение, b и с - по умолчанию; my class(int,int); а и b - явные значения, с - по умолчанию; my class{int,int,int); а, b и с - явные значения Теперь мы можем объявить объект одним из следующих способов: my class my object1; a,b и с задаются по умолчанию my class my object2(50); а=50, b и с задаются по умолчанию my class my object3(50,60); а=50, b=60, с задается по умолчанию my class my object4(50,60,70); а=50, b=60, с=70 В конструкторе можно также использовать аргументы, заданные по умолчанию. Рассмотрим пример: class my class { int a,b,c; public: my class(int ia=10, int ib=20, int ic=30) {a=ia;b=ib;c=ic;} Теперь мы можем объявить объекты так: my class my object1; а=10, b=20, с=30 my class my object2(100); а=100, b=20, с=30 my ciass my object3(100,150); a=100, b=150, c=30 my class my object4(100,150,170); a=100, b=150, c=170 По аналогии с конструктором любая функция в языке С++ может иметь аргументы, заданные по умолчанию. Здесь применяется такое правило. Если функция имеет аргумент, заданный по умолчанию, то после него могут идти только аргументы, тоже заданные по умолчанию. Рассмотрим примеры: int f1(int a.char b=#,float f); ошибка int f2{int a.char b-#,float f=5.28); нет ошибки Объект класса, у которого нет конструктора, можно инициализировать, присвоив ему значение другого объекта того же класса. Если у соответствующего класса есть конструктор, то либо этот конструктор должен иметь аргументы, заданные по умолчанию, либо необходимо объявить и описать конструктор для копирования (сору constructor). Последний тип конструктора будет рассмотрен позже. Приведем пример: my class my object1; my class my object = my object1; Рассмотрим примеры использования конструкторов. Во всех программах для упрощения не производится обработка возможных ошибочных ситуаций. В реальных программах надо всегда производить такую обработку. Этим вопросам посвящена гл. 7. В первом примере вводится конструктор в программу, рассмотренную в § 3.2. #include <iostream.h> class my class { int x,y; public: my class(int X,int Y) { x=X; y=Y; } это первы! конструктор my class() { x=y=0; } это второй конструктор my ciass f(my ciass); my class* ff(void) { x=y=100; return this; } void displayO { cout x V У endl; } my class my class::f(my class M) { x-l-=M.x; y-l-=M.y; return *this; } void main(void) {my class A(10,20),B; использование первого конструктора
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |