Professional Documents
Culture Documents
09 Operators Overloading
09 Operators Overloading
Любомир Чорбаджиев1
lchorbadjiev@elsys-bg.org
1
Технологическо училище “Електронни системи”
Технически университет, София
29 март 2009 г.
1 Операции с вектори
Дефиниции
Примерна реализация
Пълен листинг
2 Предефиниране на оператори
a
Нека са дадени два вектора ⃗ = (ax , ay ) и ⃗b = (bx , by ). Операцията
събиране на вектори дава нов вектор ⃗ c = (cx , cy ), такъв че:
cx = ax + bx , cy = ay + by
a
Нека са дадени два вектора ⃗ = (ax , ay ) и ⃗b = (bx , by ). Операцията
изваждане на вектори дава нов вектор ⃗ c = (cx , cy ), такъв че:
cx = ax − bx , cy = ay − by
public :
2
4 y =0)
5 : x_ ( x ) , y_ ( y )
{}
double const { return
6
get_x () x_ ;}
double const { return
7
8 get_y () y_ ;}
Point &
sub ( const Point & p );
10
Point &
mul ( double a );
11
12 Point &
13 };
4 * ;
5 }
Нека са дадени два вектора p⃗1 и p⃗2 . Операцията p⃗1 = p⃗1 + p⃗2
може да се изпълни по следния начин:
Point p1 , p2 ;
//....
p1 . add ( p2 );
4 * ;
5 }
Нека са дадени два вектора p⃗1 и p⃗2 . Операцията p⃗1 = p⃗1 − p⃗2
може да се изпълни по следния начин:
Point p1 , p2 ;
//....
p1 . sub ( p2 );
4 * ;
5 }
Point p ;
double alpha ;
//....
p . mul ( alpha );
1 Point p1 , p2 , p3 ;
2 //...
3 p1 . add ( p2 ). sub ( p3 ). mul (10.0);
1 p1 . add ( p2 );
2 p1 . sub ( p3 );
3 p1 . mul (10.0);
class Point {
3
double x_ , y_ ;
4
public :
5
7 y =0)
8 : x_ ( x ) , y_ ( y )
{}
double const { return
9
get_x () x_ ;}
double const { return
10
11 get_y () y_ ;}
const
5
9 * ;
}
const
10
14 * ;
15 }
4 * ;
5 }
int void
6
7 main ( ) {
8 Point p1 (1.0 ,1.0);
9 Point p2 (2.0 ,2.0);
10 Point p3 (3.0 ,3.0);
6 0;
7 }
lubo@kid:~/school/notes> ./a.out
p3=(40, 40)
Предефиниране на оператори
1 Point p1 , p2 , p3 ;
2 //...
3 p1 = p2 + p3 ;
4 p1 *=10.0;
5 p3 -= p3 ;
Предефиниране на оператори
Бинарни оператори
Бинарни оператори
class Point {
3
double x_ , y_ ;
4
public :
5
7 y =0)
8 : x_ ( x ) , y_ ( y )
9 {}
Бинарни оператори
get_y ()
Point operator +( const Point & p ) const ;
2
};
Point Point :: operator +( const Point & p ) const
4
5 {
6 Point result ( get_x ()+ p . get_x () ,
get_y ()+ p . get_y ());
return
7
8 result ;
9 }
Бинарни оператори
4 p3 = p1 + p2 ;
5 cout < < " p3 =( "
6 << p3 . get_x () < < " ,␣ "
<< p3 . get_y () < < " ) " << endl ;
return
7
8 0;
9 }
p3 = p1 . operator +( p2 );
Бинарни оператори
Бинарни оператори
class Point {
2
double x_ , y_ ;
3
public :
4
6 y =0)
7 : x_ ( x ) , y_ ( y )
{}
double const { return
8
get_x () x_ ;}
double const { return
9
10 get_y () y_ ;}
11 };
Бинарни оператори
4 result ;
}
int void
5
6 main ( ) {
7 Point p1 (1.0 ,1.0) , p2 (2.0 ,2.0) , p3 ;
8 p3 = p1 + p2 ;
9
13 0;
14 }
Бинарни оператори
p3 = operator +( p1 , p2 );
Унарни оператори
Унарни оператори
class Point {
3
double x_ , y_ ;
4
public :
5
7 y =0)
8 : x_ ( x ) , y_ ( y )
9 {}
Унарни оператори
get_y ()
Point operator -( void ) const ;
2
};
Point Point :: operator -() const {
4
8 }
Унарни оператори
4 p2 = - p1 ;
5 cout < < " p2 =( "
6 << p2 . get_x () < < " ,␣ "
<< p2 . get_y () < < " ) " << endl ;
return
7
8 0;
9 }
Унарни оператори
p2 = p1 . operator -();
Резултатът от изпълнението на тази програма е:
lubo@kid:~/school/notes> ./a.out
p2=(-1, -1)
Унарни оператори
class Point {
2
double x_ , y_ ;
3
public :
4
6 y =0)
7 : x_ ( x ) , y_ ( y )
{}
double const { return
8
get_x () x_ ;}
double const { return
9
10 get_y () y_ ;}
11 };
Унарни оператори
3 result ;
}
int void
4
5 main ( ) {
6 Point p1 (1.0 ,1.0) , p2 ;
7
8 p2 = - p1 ;
9 cout < < " p2 =( "
10 << p2 . get_x () < < " ,␣ "
<< p2 . get_y () < < " ) " << endl ;
return
11
12 0;
13 }
Унарни оператори
p2 = operator -( p1 );
Резултатът от изпълнението на тази програма е:
lubo@kid:~/school/notes> ./a.out
p2=(-1, -1)
Предефиниране на оператори
2 {
3 out << " point ( " << p . get_x () << " ,␣ "
<< p . get_y () << " ) " ;
return
4
5 out ;
6 }
class Point {
2
double x_ , y_ ;
3
public :
4
6 y =0)
7 : x_ ( x ) , y_ ( y )
{}
double const { return x_ ;}
8
get_x ()
double const { return y_ ;}
9
get_y ()
operator +=( const Point & p );
10
Point &
operator -=( const Point & p );
11
Point &
operator *=( double alpha );
12
13 Point &
14 };
4 * ;
}
operator -=( const
5
9 * ;
}
operator *=( double
10
14 * ;
15 }
4 result ;
}
operator const const
5
9 result ;
10 }
4 result ;
}
operator double const
5
7 p * alpha ;
}
operator const
8
12 out ;
13 }
11 0;
12 }
lubo@kid:~/school/notes> ./a.out
p3=point(3, 3)
p3=point(6, 6)
p3=point(10, 10)
p3=point(20, 20)
class Array {
4
int * data_ ;
5
public :
7
10
{}
~ Array ( void ) {
11
delete [] data_ ;
12
13
14 }
cerr << " index ␣ out ␣ of ␣ bounds ... " << endl ;
throw exception ();
3
}
return data_ [ index ];
5
}
unsigned size () const {
7
return size_ ;
8
10 }
11 };
for ( int
3
4 i =0; i <3;++ i ) {
5 v . element ( i )= i ;
}
for ( int
6
return
10
11 0;
12 }
lubo@kid:~/school/notes> ./a.out
v[i]=0
v[i]=1
v[i]=2
class Array {
4
int * data_ ;
6
public :
7
10
{}
~ Array ( void ) {
11
delete [] data_ ;
12
13
14 }
cerr << " index ␣ out ␣ of ␣ bounds ... " << endl ;
throw exception ();
3
}
return data_ [ index ];
5
}
unsigned size () const {
7
return size_ ;
8
10 }
11 };
3 {
4 v [ i ]= i ;
}
for ( int
5
v [3]=5;
} catch ( const
10
11 exception & e ) {
12 cout << " exception ␣ catched ... " << endl ;
}
return
13
14 0;
15 }
lubo@kid:~/school/notes> ./a.out
v[i]=0
v[i]=1
v[i]=2