Curso de C++ v2.0
Consultas, lista de correo 'C++ Con Clase' 'C++ Con Clase' página de entrada Librerías estándar C Tabla de contenido Contactar con Webmaster
*Introducción
*1 Toma de contacto
*2 Variables I
*3 Funciones I: Declaración y definición
*4 Operadores I
*5 Sentencias
*6 Declaración de variables
*7 Normas para la notación
*8 Cadenas de caracteres
*9 Conversión de tipos
*10 Variables II: Arrays
*11 Variables III: Estructuras
*12 Variables IV: Punteros 1
*13 Operadores II: Más operadores
*14 Operadores III: Precedencia
*15 Funciones II: Parámetros por valor y referencia
*16 Variables V: Uniones
*17 Variables VI: Punteros 2
*18 Operadores IV: De bits y condicional
*19 Definición de tipos
*20 Funciones III
*21 Funciones IV: Sobrecarga
*22 Operadores V: Sobrecarga
*23 El preprocesador
*24 Funciones V: Recursividad
*25 Variables VII: Modificadores
*26 Espacios con nombre
*27 Clases I: Definiciones
*28 Declaración de clases
*29 Constructores
*30 Destructores
*31 El puntero this
*32 Sistema de protección
*33 Modificadores para miembros
*34 Más sobre funciones
 . Argumentos con valores por defecto
*35 Operadores sobrecargados
*36 Herencia
*37 Funciones virtuales
*38 Derivación múltiple
*39 Trabajar con ficheros
*40 Plantillas
*41 Punteros a miembros
*42 Castings
*43 Excepciones
*Ejemplos capítulos 1 a 6
*Ejemplos capítulos 8 y 9
*A Palabras reservadas C/C++
*B Trigrafos y símbolos alternativos
*C Librerías estándar
*D Streams
<< < > >>

34 Más sobre las funciones

Funciones sobrecargadas:  

Ya hemos visto que se pueden sobrecargar los constructores, y en el capítulo 23 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:

#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(z.y) {}
   
   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();
        
   cin.get();
   return 0;
}

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 22 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:

#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();
        
   cin.get();
   return 0;
}

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

<< < > >>
Free Web Hosting