Circle::circle(int c_x, int c_y, int c_r)



{

   x = c _ x ; y = c _ y ; r = c _ r ;

}

Для передачи аргументов конструктору необходимо задать его значение при объявлении объекта. С++ поддерживает два способа решения этой задачи. В первом вызывается непосредственно с передачей ему значений переменных:

circle a = circle (1, 2, 3);

Во втором способе аргументы следуют непосредственно за объектом в круглых скобках:

circle a (1, 2, 3);

Дополнением конструктора является деструктор. Во многих случаях перед уничтожением объекта необходимо выполнить определенные действия. Локальные объекты создаются при входе в блок кода и уничтожаются при выходе из него. Глобальные объекты уничтожаются при завершении работы программы. Имеется много причин, чтобы существовал деструктор. Например, может потребоваться освободить память, которая была ранее зарезервирована. В С++ за дезактивацию отвечает деструктор. Он должен иметь то же имя, что и конструктор только к нему добавляется значок ~: ~circle().

Если рассматривать часть программы, которая не входит в состав класса, то для доступа к его членам необходимо использовать следующую конструкцию:

<имя объекта>.<имя члена класса>, если мы работаем непосредственно с объектом или

<имя указателя>-><имя члена класса>, если мы работаем с указателем на объект. Например:

circle one, *two;

float a, b;

a = one.get_length();

b = two -> get _ square ();

Напомним, что созданные объекты в С++ являются обычными переменными, поэтому они могут передаваться в функции в качестве аргументов, а также служить типом возвращаемого функцией значения. Помимо этого, возможно создавать массивы объектов и получать указатели на объекты:

circle function(circle a, circle* b)

void main(void) {

circle one, *two, three[10], *four, *five, six;

two = &one; four = three; five = &three[2];

six = function ( one , five );

}

Для реализации полиморфизма в С++ существует механизм, называемый перегрузкой функций. Смысл его заключается в том, что две и более функции могут иметь одинаковое имя, если они отличаются набором параметров в интерфейсе. Компилятор определяет, какую функцию можно использовать в конкретной ситуации, благодаря типу аргумента. По существу перегрузка функций позволяет создавать единое имя для операции, а компилятор устанавливает, какую именно функцию следует использовать в конкретной ситуации для выполнения данной операции. Например, опишем функции для ввода символов, целых и вещественных чисел, которые могут выдавать подсказку пользователю:

#include<iostream.h>

void promt(char *str, char *ch)

{

   cout<<str;

   cin>>*ch;

}

void promt(char *str, int *i)

{

   cout<<str;

   cin>>*i;

}

void promt(char *str; float *f);

{

   cout<<str;

   cin>>*f;

}

Void main(void)

{

   char a; int b; float c;

   promt(“Enter a char: ”, &a);

   promt(“Enter an integer: ”, &b);

   promt(“Enter a float: ”, &c);

   cout << a <<” “<< b <<” “<< c ;

}

Другим способом реализации полиморфизма в языке С++ служит перегрузка операторов. Например, можно перегрузить операторы +, = и т.д. для выполнения специфичных действий. В общем случае можно перегружать операторы С++, определяя, что они означают применительно к определенному классу. Можно перегрузить оператор + по отношению к объектам типа <множество> таким образом, что он производит объединение двух произвольных множеств. Другой класс может использовать + совершенно другим образом. Например, для добавления элементов в список. Для того, чтобы перегрузить оператор, необходимо определить, что именно означает оператор по отношению к тому классу, к которому он применяется. Для этого определяется функция-оператор, задающая действие оператора. Общая форма записи функции оператора для случая, когда она является членом класса, имеет вид:

<тип> <имя класса>:: operator #(<список аргументов>)

{
   <действия, выполняемые оператором>;

}

Здесь перегружаемый оператор подставляется вместо символа #, а тип задает тип значений возвращаемых оператором. Для того, чтобы упростить использование перегруженного оператора в сложных выражениях, в качестве возвращаемого значения часто выбирают тот же самый тип, что и класс, для которого перегружен оператор. Например, перегрузим операторы + и = для класса circle.

class circle {

Int x ; // координаты центра

   int y ;

Int r ; // значение радиуса

public:

   circle(int c_x, int c_y, int c_r);

   ~circle();

   circle operator+(circle);

   circle operator=(circle);

}


Дата добавления: 2019-09-13; просмотров: 240; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!