Перегрузка операторов в C++

Перегрузка операторов в C++ Программирование и разработка

Перегрузка операторов в C++

В этой статье содержится руководство по перегрузке операторов в C ++. Перегрузка операторов — полезная и мощная функция языка программирования C ++. C ++ допускает перегрузку большинства встроенных операторов. В этом руководстве мы будем использовать несколько примеров, чтобы продемонстрировать механизм перегрузки оператора.

Что такое Оператор?

Оператор — это символ, который указывает компилятору выполнить определенную операцию. Например, в C ++ существуют различные типы операторов, такие как арифметические операторы, логические операторы, операторы отношения, операторы присваивания, побитовые операторы и другие.

Что такое перегрузка оператора?

Язык C ++ позволяет программистам придавать операторам особое значение. Это означает, что вы можете переопределить оператор для пользовательских типов данных в C ++. Например, «+» используется для добавления встроенных типов данных, таких как int, float и т. Д. Чтобы добавить два типа пользовательских данных, необходимо перегрузить оператор «+».

Синтаксис для перегрузки оператора

C ++ предоставляет специальную функцию под названием «оператор» для перегрузки оператора. Ниже приводится синтаксис перегрузки оператора:

class sampleClass
{
…………..
Public:
returnType operator symbol (arguments) {
…………..
}
…………..
};

Здесь «оператор» — это ключевое слово, а «символ» — это оператор, который мы хотим перегрузить.

Примеры

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

  • Пример 1: перегрузка унарного оператора (1)
  • Пример 2: перегрузка унарного оператора (2)
  • Пример 3: Перегрузка двоичного оператора
  • Пример 4: Перегрузка оператора отношения

Пример 1: перегрузка унарного оператора (1)

В этом примере мы продемонстрируем, как унарный оператор может быть перегружен в C ++. Мы определили класс «Square_Box» и общедоступные функции «operator ++ ()» и «operator ++ (int)», чтобы перегрузить как префиксные, так и постфиксные операторы приращения. В функции main () мы создали объект mySquare_Box1. Затем мы применили операторы приращения префикса и постфикса к объекту «mySquare_Box1», чтобы продемонстрировать перегрузку унарного оператора.

#include <iostream>
using namespace std;

class Square_Box
{
private:
float length;
float width;
float height;

public:
Square_Box() {}
Square_Box(float l, float w, float h)
{
length = l;
width = w;
height = h;
}

// Operator Overloading  — «++» prefix operator
void operator ++ ()
{
length++;
width++;
height++;
}

// Operator Overloading  — «++» postfix operator
void operator ++ (int)
{
length++;
width++;
height++;
}

void output()
{
cout << «\tLength = « << length << endl;
cout << «\tWidth = « << width << endl;
cout << «\tHeight = « << height << endl;
cout << endl;
}
};

int main()
{
Square_Box mySquare_Box1(3.05.06.0);

cout << «Dimensions of mySquare_Box1 = « << endl;
mySquare_Box1.output();

mySquare_Box1++;

cout << «Dimensions of mySquare_Box1 = « << endl;
mySquare_Box1.output();

++mySquare_Box1;

cout << «Dimensions of mySquare_Box1 = « << endl;
mySquare_Box1.output();

return ;
}

перегрузка унарного оператора (1)

Пример 2: перегрузка унарного оператора (2)

Это еще один пример, в котором мы продемонстрируем, как унарный оператор может быть перегружен в C ++. Мы определили класс «Square_Box» и общедоступные функции «operator — ()» и «operator — (int)» для перегрузки как префиксных, так и постфиксных операторов декремента. В функции main () мы создали объект mySquare_Box1. Затем мы применили операторы префиксного и постфиксного декремента к объекту «mySquare_Box1».

#include <iostream>
using namespace std;

class Square_Box
{
private:
float length;
float width;
float height;

public:
Square_Box() {}
Square_Box(float l, float w, float h)
{
length = l;
width = w;
height = h;
}

// Operator Overloading  — «—» prefix operator
void operator  ()
{
length;
width;
height;
}

// Operator Overloading  — «—» postfix operator
void operator  (int)
{
length;
width;
height;
}

void output()
{
cout << «\tLength = « << length << endl;
cout << «\tWidth = « << width << endl;
cout << «\tHeight = « << height << endl;
cout << endl;
}
};

int main()
{
Square_Box mySquare_Box1(3.05.06.0);

cout << «Dimensions of mySquare_Box1 = « << endl;
mySquare_Box1.output();

mySquare_Box1;

cout << «Dimensions of mySquare_Box1 = « << endl;
mySquare_Box1.output();

mySquare_Box1;

cout << «Dimensions of mySquare_Box1 = « << endl;
mySquare_Box1.output();

return ;
}

перегрузка унарного оператора (2)

Пример 3: Перегрузка двоичного оператора

Теперь мы рассмотрим пример перегрузки бинарного оператора. Синтаксис перегрузки бинарного оператора будет несколько отличаться от перегрузки унарного оператора. В этом примере мы перегрузим оператор «+», чтобы добавить два объекта «Square_Box».

#include <iostream>
using namespace std;

class Square_Box
{
private:
float length;
float width;
float height;

public:
Square_Box() {}
Square_Box(float l, float w, float h)
{
length = l;
width = w;
height = h;
}

// Operator Overloading  — «+» operator
Square_Box operator + (const Square_Box& obj)
{
Square_Box temp;
temp.length = length + obj.length;
temp.width = width + obj.width;
temp.height = height + obj.height;
return temp;
}

void output()
{
cout << «\tLength = « << length << endl;
cout << «\tWidth = « << width << endl;
cout << «\tHeight = « << height << endl;
cout << endl;
}
};

int main()
{
Square_Box mySquare_Box1(3.05.06.0), mySquare_Box2(2.03.05.0), result;

cout << «Dimensions of mySquare_Box1 = « << endl;
mySquare_Box1.output();

cout << «Dimensions of mySquare_Box2 = « << endl;
mySquare_Box2.output();

result = mySquare_Box1 + mySquare_Box2;

cout << «Dimensions of resultant square box = « << endl;
result.output();

return ;
}

Перегрузка двоичного оператора

Пример 4: Перегрузка оператора отношения

Теперь мы рассмотрим пример перегрузки реляционного оператора. Синтаксис перегрузки реляционного оператора аналогичен синтаксису перегрузки бинарного оператора. В этом примере мы перегрузим операторы «<» и «>», чтобы применить их к объектам «Square_Box».

#include <iostream>
using namespace std;

class Square_Box
{
private:
float length;
float width;
float height;

public:
Square_Box() {}
Square_Box(float l, float w, float h)
{
length = l;
width = w;
height = h;
}

// Operator Overloading  — «<» operator
bool operator < (const Square_Box& obj)
{
if(length < obj.length)
return true;
else
return false;
}

// Operator Overloading  — «>» operator
bool operator > (const Square_Box& obj)
{
if(length > obj.length)
return true;
else
return false;
}
void output()
{
cout << «\tLength = « << length << endl;
cout << «\tWidth = « << width << endl;
cout << «\tHeight = « << height << endl;
cout << endl;
}
};

int main()
{
Square_Box mySquare_Box1(2.03.05.0), mySquare_Box2(4.06.08.0);
bool result;

cout << «Dimensions of mySquare_Box1 = « << endl;
mySquare_Box1.output();

cout << «Dimensions of mySquare_Box2 = « << endl;
mySquare_Box2.output();

result = mySquare_Box1 < mySquare_Box2;
cout << «mySquare_Box1 < mySquare_Box2 = « << result < mySquare_Box2;
cout < mySquare_Box2 = » << result << endl;

return 0;
}

Перегрузка оператора отношения

Заключение

C ++ — это универсальный и гибкий язык программирования, который широко используется в самых разных областях. Этот язык программирования поддерживает полиморфизм как во время компиляции, так и во время выполнения. В этой статье показано, как выполнять перегрузку операторов в C ++. Это очень полезная функция C ++, которая добавляет некоторые дополнительные усилия разработчику для определения оператора для перегрузки, но определенно облегчает жизнь пользователю этого класса.

Оцените статью
bestprogrammer.ru
Добавить комментарий