Prev Next Up Title Contents Index

Kuormitus (lisämäärittely, overloading, polymorphism)


C- kielessä jokaiselle eri tyypille tehdylle funktiolla on keksittävä eri nimi, vaikka toiminta ja tarkoitus olisi sama. C++ - kielessä voi saman niminen funktio esiintyä useassa eri tarkoituksessa, mikäli kunkin funktion eri muodossa parametrilistat ovat erilaiset ainakin yhden tyypin kohdalta:

overload.cpp - funktion kuormitus (overloading)

	/* OVERLOAD.CPP */
	#include <stdio.h>
	
	void tulosta(int i)
	{
	  printf("Kokonaisluku on %d\n",i);
	}
	
	void tulosta(double d)
	{
	  printf("Reaaliluku on %4.2lf\n",d);
	}
	
	int main(void)
	{
	  tulosta(3); tulosta(3.2);
	  return 0;
	}
Käytännössä kääntäjä nimeää funktion eri muodot eri nimillä funktiossa olevien tyyppien mukaan (ks. C- funktioiden käyttö). Kun funktion kutsu käännetään, etsitään kutsussa olevien parametrien tyypit ja näiden perusteella yritetään päätellä mitä funktion muotoa todella halutaan kutsua.

Jos edellä olisi kirjoitettu vain funktiot ja kutsu:

	  tulosta(double d) 
	...
	  tulosta(float f) 
	...
	  tulosta(3);
	...
ei kääntäjä tietäisi kummaksiko 3 muutettaisiin; doubleksi vai floatiksi.

Tehtävä 1.4 Ero palautustyypissä

Voiko olla funktiot
double summa(int a, int b)
int summa(int a,int b)
Miksi?


Prev Next Up Title Contents Index