Пример 1
Рассмотрим перегрузку операций на примере класса CVector. Экземпляры этого класса будут представлять из себя обычные векторы на плоскости. Каждый вектор будет задаваться двумя числами (x и y). После переопределения мы сможем складывать наши векторы (посредством обыкновенного плюса), вычитать (с помощью минуса), скалярно перемножать (используя знак *) и т. д.
#include <iostream.h>
class CVector{
float m_x, m_y;
public:
CVector(){}
CVector(float x, float y);
CVector operator+(CVector);
void print();
};
void main(){
CVector a, b(1,2), c(3,1);
a=b+c;
a.print();
cout<<"\n";
}
CVector::CVector(float x, float y){
m_x=x;
m_y=y;
}
CVector CVector:: operator+(CVector v){
CVector t;
t.m_x=m_x+v.m_x;
t.m_y=m_y+v.m_y;
return t;
}
void CVector::print(){
cout<<"("<<m_x<<", "<<m_y<<")";
}
Умножение с векторами
float CVector::operator*(CVector v){
return m_x*v.m_x + m_y*v.m_y;
}
И в самой программе меняем так:
void main(){
CVector b(1,2), c(3,1);
int z;
z=b*c;
cout<<z<<"\n";
}
Пример 2
Перегрузка операций со строками: Плюс и минус (добавить и удалить букву из строки)
#include <iostream.h>
#include <string.h>
class string
{
public:
string(char *); // Конструктор
|
|
char * operator +(char *);
char * operator -(char);
void show_string(void);
private:
char data[256];
};
string::string(char *str)
{
strcpy(data, str);
}
char * string::operator +(char *str)
{
return(strcat(data, str));
}
char * string:: operator -(char letter)
{
char temp[256];
int i, j;
for (i = 0, j = 0; data[i]; i++) if (data[i] 1= letter) temp[j++] = data[i];
temp[j] = NULL;
return(strcpy(data, temp));
}
void string::show_string(void)
{
cout << data << endl;
}
void main(void)
{
string title("Учимся программировать на C++");
string lesson("Перегрузка операторов");
title.show_string();
title = title + " я учусь";
title.show_string();
lesson.show_string();
lesson = lesson - '?';
lesson.show_string();
}
----------------------------------------------------------------------------------------------------------