34 Más sobre las funciones

Funciones sobrecargadas

Ya hemos visto que se pueden sobrecargar los constructores, y en el capítulo 21 vimos que se podía sobrecargar cualquier función, aunque no pertenezcan a ninguna clase. Pues bien, las funciones miembros de las clases también pueden sobrecargarse, como supongo que ya habrás supuesto.

No hay mucho más que añadir, así que pondré un ejemplo:

// Sobrecarga de funciones
// (C) 2009 Con Clase
// Salvador Pozo

#include <iostream>
using namespace std;
 
struct punto3D {
   float x, y, z;
};
 
class punto {
  public:
   punto(float xi, float yi, float zi) : 
      x(xi), y(yi), z(zi) {}
   punto(punto3D p) : x(p.x), y(p.y), z(p.z) {}
   
   void Asignar(float xi, float yi, float zi) {
      x = xi;
      y = yi;
      z = zi;
   }
   
   void Asignar(punto3D p) {
      Asignar(p.x, p.y, p.z);
   }
   
   void Ver() {
      cout << "(" << x << "," << y 
           << "," << z << ")" << endl;
   }
   
  private:
   float x, y, z;
}; 

int main() {
   punto P(0,0,0);
   punto3D p3d = {32,45,74};
   
   P.Ver();
   P.Asignar(p3d); 
   P.Ver();
   P.Asignar(12,35,12);
   P.Ver();

   return 0;
}

Ejecutar este código en codepad.

Como se ve, en C++ las funciones sobrecargadas funcionan igual dentro y fuera de las clases.

Funciones con argumentos con valores por defecto

También hemos visto que se pueden usar argumentos con valores por defecto en los constructores, y también vimos en el capítulo 20 que se podían usar con cualquier función fuera de las clases. En las funciones miembros de las clases también pueden usarse parámetros con valores por defecto, del mismo modo que fuera de las clases.

De nuevo ilustraremos esto con un ejemplo:

// Parámetros con valores por defecto
// (C) 2009 Con Clase
// Salvador Pozo

#include <iostream>
using namespace std;
 
class punto {
  public:
   punto(float xi, float yi, float zi) : 
      x(xi), y(yi), z(zi) {}
   
   void Asignar(float xi, float yi = 0, float zi = 0) {
      x = xi;
      y = yi;
      z = zi;
   }

   void Ver() {
      cout << "(" << x << "," << y << "," 
           << z << ")" << endl;
   }
   
  private:
   float x, y, z;
}; 

int main() {
   punto P(0,0,0);
   
   P.Ver();
   P.Asignar(12);
   P.Ver();
   P.Asignar(16,35);
   P.Ver();
   P.Asignar(34,43,12);
   P.Ver();

   return 0;
}

Ejecutar este código en codepad.

Las reglas para definir parámetros con valores por defecto son las mismas que se expusieron en el capítulo 22.

Comentarios de los usuarios (1)

alexis
2014-02-20 17:13:23

me pueden ayudar con este ejemplo

La empresa “VENCEL” vende diariamente cerca de 200 teléfonos celulares en modalidad de

prepago. El registro de las ventas es muy deficiente, por lo que no es posible realizar algunos

análisis de sus datos para mejorar las utilidades.

El vendedor elabora la nota de venta, que incluye los datos: código de la nota, fecha, código del

vendedor, código del teléfono, número del SIM y número telefónico asignado.

Los datos del punto de venta necesarios son: código, tipo (matriz/sucursal), nombre, domicilio,

número telefónico y gerente.

Los datos requeridos de cada vendedor son: código, nombre, RFC y código del punto de venta.

Los vendedores obtienen cierta comisión por cada teléfono vendido, misma que cambia según

sea el teléfono.

Las notas de venta son recabadas en el punto de venta y enviadas a la sede de la empresa

diariamente, para realizar ahí su registro.

Los datos involucrados de cada teléfono son: código, descripción, IMEI, número de serie, precio

y comisión del vendedor.

Con esta información, VENCEL busca una empresa productora de software que le implemente

un sistema informático.

El sistema debe permitir: recibir datos, mostrar información completa, así como buscar y

modificar datos de teléfonos, puntos de venta, vendedores y notas de venta.