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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!