Базовые знания C++ (2): Перегрузка функций.

        Перегрузка функций - это особый случай. C++ позволяет объявлять несколько похожих функций с одинаковым именем в одной области видимости. Формальные списки параметров (число, тип, порядок параметров) этих функций с одинаковым именем должны быть разными. Это часто используется для обработки данных, реализующих схожие функции.Различные типы вопросов.

1. Правила перегрузки функций
  • Имена функций должны быть одинаковыми.
  • Списки параметров должны быть разными (разное количество, разный тип, разный порядок параметров и т. д.).
  • Типы возвращаемых функций могут быть одинаковыми или разными.
  • Просто иметь разные типы возвращаемых значений недостаточно, чтобы быть перегруженной функцией.
2. Перегрузка оператора

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

имя оператора

оператор

Бинарные арифметические операторы

+、-、*、、、%

Реляционные операторы

==、!=、、=

Логические операторы

||、&&、!

Унарный оператор

+, -, * (указатель) & (адрес)

Операторы увеличения и уменьшения

++、–

Битовые операторы

|、&、-、……、>

оператор присваивания

=、+=、-=、*=、/=、%=、&=、!=、^=、>=

Распределение и освобождение пространства

новый、удалить、новый[]、удалить[]

Другие операторы

()(вызов функции), ->(доступ к члену), ->*(доступ к указателю члена), ,(запятая)

Перегруженные операторы не допускаются:

имя оператора

оператор

оператор доступа к участникам

.

оператор доступа к указателю члена

. *

оператор домена

::

оператор длины

размер()

условный оператор

?:

Существует две формы перегрузки операторов: перегруженные функции служат членами класса, а перегруженные функции служат дружественными функциями класса; в зависимости от операндов операторов бинарные операторы служат функциями-членами класса, а унарные операторы служат функциями-членами класса. Функции-члены, бинарные операторы служат дружественными функциями класса, а унарные операторы служат дружественными функциями класса.

  • Когда бинарный оператор используется в качестве дружественной функции, необходимо указать два параметра.
  • Перегруженные оператором функции могут вызываться явно как функции-члены класса.
3. Распространенная перегрузка операторов

(1) Самовозрастающая и самоубывающая:

//前置运算符 ++a --a
operator++()
operator--()
operator++(Vector3 &v)
operator--(Vector3 &v)
//后置运算符 a-- a++
operator++(int)
operator--(int)
operator++(Vector3 &v,int)
operator--(Vector3 &v,int)

(2) Оператор присваивания:

String& String::operator=(String &s)
{
    if(this!=&s)
    {
        delete[] str;
        int length = strlen(s.str);
        str = new char[length+1];
        strcpy(str,s.str);
    }
    return (*this)
}

(3) Перегрузка оператора ввода-вывода:

friend ostream &operator<<( ostream &output,const Vector3 &v )
{
    output << "F : " <<v.m_x<< " I : " << v.m_y<<v.m_z;
    return output;
}

friend istream &operator>>( istream  &input, Vector3 &v )
{ 
     input >> v.m_x>> v.m_y>>v.m_z;
     return input;            
}

Guess you like

Origin blog.csdn.net/weixin_55238862/article/details/135324410