C ++ orientado a objetos: operadores sobrecarregados de C ++ e funções sobrecarregadas

C ++ permite que várias definições de uma função e operador no mesmo escopo sejam especificadas, que são chamadas de sobrecarga de função e sobrecarga de operador, respectivamente .

Uma declaração sobrecarregada refere-se a uma declaração com o mesmo nome de uma função ou método que foi declarado no escopo antes, mas sua lista de parâmetros e definição (implementação) são diferentes.

Quando você chama uma função ou operador sobrecarregado , o compilador compara o tipo de parâmetro que você está usando com o tipo de parâmetro na definição e decide escolher a definição mais apropriada. O processo de seleção da função sobrecarregada ou operador sobrecarregado mais apropriado é chamado de tomada de decisão de sobrecarga .

 

Sobrecarga de função em C ++

Dentro do mesmo escopo, você pode declarar várias funções com o mesmo nome com funções semelhantes, mas os parâmetros formais (referentes ao número, tipo ou ordem dos parâmetros) dessas funções com o mesmo nome devem ser diferentes. Você não pode sobrecarregar uma função apenas pela diferença no tipo de retorno.

Saia de aprendizagem C / C ++ [7, 12, 2, 84, 705], se você é um novato ou uma pessoa avançada, se você deseja mudar de carreira ou iniciar uma carreira, vocês podem vir a entender e aprender juntos! Existem ferramentas de desenvolvimento na saia, muitos produtos secos e informações técnicas para compartilhar!

No exemplo a seguir, a função print () com o mesmo nome   é usada para gerar diferentes tipos de dados:

#include <iostream>
using namespace std;


class printData
{
   public:
      void print(int i) {
        cout << "整数为: " << i << endl;
      }


      void print(double  f) {
        cout << "浮点数为: " << f << endl;
      }


      void print(char c[]) {
        cout << "字符串为: " << c << endl;
      }
};


int main(void)
{
   printData pd;


   // 输出整数
   pd.print(5);
   // 输出浮点数
   pd.print(500.263);
   // 输出字符串
   char c[] = "Hello C++";
   pd.print(c);


   return 0;
}

Quando o código acima for compilado e executado, ele produzirá os seguintes resultados:

 

 

 

Sobrecarga de operador em C ++

Você pode redefinir ou sobrecarregar a maioria dos operadores integrados de C ++. Dessa forma, você pode usar tipos personalizados de operadores.

Um operador sobrecarregado é uma função com um nome especial.O nome da função é composto do operador de palavra-chave e dos símbolos do operador a serem sobrecarregados posteriormente. Como outras funções, os operadores sobrecarregados têm um tipo de retorno e uma lista de parâmetros.

Boxoperator+(constBox&);

Declare que o operador de adição é usado para adicionar dois objetos Box e retornar o objeto Box final. A maioria dos operadores sobrecarregados pode ser definida como funções não-membro comuns ou como funções-membro de classe. Se definirmos a função acima como uma função não membro da classe, então precisamos passar dois parâmetros para cada operação, conforme mostrado abaixo:

Boxoperator+(constBox&,constBox&);

O exemplo a seguir usa funções de membro para demonstrar o conceito de sobrecarga de operador. Aqui, o objeto é passado como um parâmetro, e as propriedades do objeto  são acessadas usando o  operador this , conforme mostrado a seguir:

#include <iostream>
using namespace std;


class Box
{
   public:


      double getVolume(void)
{
         return length * breadth * height;
      }
      void setLength( double len )
{
          length = len;
      }


      void setBreadth( double bre )
{
          breadth = bre;
      }


      void setHeight( double hei )
{
          height = hei;
      }
      // 重载 + 运算符,用于把两个 Box 对象相加
      Box operator+(const Box& b)
      {
         Box box;
         box.length = this->length + b.length;
         box.breadth = this->breadth + b.breadth;
         box.height = this->height + b.height;
         return box;
      }
   private:
      double length;      // 长度
      double breadth;     // 宽度
      double height;      // 高度
};
// 程序的主函数
int main( )
{
   Box Box1;                // 声明 Box1,类型为 Box
   Box Box2;                // 声明 Box2,类型为 Box
   Box Box3;                // 声明 Box3,类型为 Box
   double volume = 0.0;     // 把体积存储在该变量中


   // Box1 详述
   Box1.setLength(6.0); 
   Box1.setBreadth(7.0); 
   Box1.setHeight(5.0);


   // Box2 详述
   Box2.setLength(12.0); 
   Box2.setBreadth(13.0); 
   Box2.setHeight(10.0);


   // Box1 的体积
   volume = Box1.getVolume();
   cout << "Volume of Box1 : " << volume <<endl;


   // Box2 的体积
   volume = Box2.getVolume();
   cout << "Volume of Box2 : " << volume <<endl;


   // 把两个对象相加,得到 Box3
   Box3 = Box1 + Box2;


   // Box3 的体积
   volume = Box3.getVolume();
   cout << "Volume of Box3 : " << volume <<endl;


   return 0;
}

Quando o código acima for compilado e executado, ele produzirá os seguintes resultados:

 

Operador sobrecarregável / operador não sobrecarregável

A seguir está uma lista de operadores que podem estar sobrecarregados:

 

A seguir está uma lista de operadores que não podem ser sobrecarregados:

  • . : Operador de acesso de membro
  • . *-> * : operador de acesso por ponteiro de membro
  • ::: Operador de domínio
  • operador sizeof : comprimento
  • ? :: Operador condicional
  • # : símbolo de pré-processamento

Exemplo de sobrecarga de operador

O seguinte fornece exemplos de várias sobrecargas de operador para ajudá-lo a entender melhor o conceito de sobrecarga.

Acho que você gosta

Origin blog.csdn.net/miaozenn/article/details/112341246
Recomendado
Clasificación