Преобразуване чрез конструктор
Всеки конструктор (извикан явно или неявно чрез един параметър) осъществява преобразуване от типа на параметъра в типа на класа.
Например за горния пример:
а=example(66);
ще доведе до създаването на временен обект от тип example и присвояване на този обект на
a.
Конструкторът може да бъде извикан и неявно:
а=66;
Може да бъде създаден и специален конструктор за преобразуване (в случая, когато член-променлива/и са функция на параметър(ри)).
Пример
CODE1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| class point
{ int x,y;
public:
point(int c=0) [color=blue]//конструктор за преобразуване[/color]
{ x=c; y=5*c; }
void out()
{ cout<<x<<” “<<y<<” “; }
};
void main()
{ point a; a.out();
a=point(12); a.out();
point b(6); b.out();
} |
Резултати от изпълнение
0 0
12 60
6 30
Преобразуванията cast или конструктор се правят само в случаите, когато не е дефинирана операция за присвояване (=) в класа.
Пример илюстриращ изпълнението на операторната функция за присвояване за целите на преобразуването
CODE1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| class point
{ int x,y;
public:
point(int a=0,int b=0)
{ x=a; y=b; cout<<”конструкторn”; }
point &operator =(point &p) [color=blue]//дефинция на функция[/color]
{ x=p.x; y=p.y; [color=blue]//за присвояване клас->клас[/color]
cout<<"присвояване point->pointn";
return *this;
}
point &operator=(int n) [color=blue]//дефиниция на функция[/color]
{ x=n;y=0; //за присвояване int->клас
cout<<"присвояване int->pointn";
return *this;
}
};
void main() //Резултати от изпълнение
{ point a(1,2); //конструктор
a=12; //присвояване int->point
point b; //конструктор
b=a; //присвояване point->point
} |
Пример за преобразуване на тип клас (point) в друг тип клас (complex) чрез конструктор за преобразуване
CODE1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| class point;
class complex
{ double real,imag;
public:
complex(double r=0,double =0) //конструктор
{ real=r; imag=i; }
complex(point); //декларация на конструктор void out() //за преобразуване
{ cout<<real<<”+”<<imag<<”In”; }
};
class point
{ int x,y;
public:
point(int a=0,int b=0)
{x=a; y=b; }
friend complex::complex(point);
};
compex::complex(point p) //дефиниция на конструктор
{ real=p.x; imag=p.y; } //за преобразуване
void main()
{ point a(3,5);
complex c(a); //дефинира се обект
c.out(); //и се извиква конструктор
} //за преобразуване |
Резултати от изпълнение
3+5i
Автор:
Янко Димитров