Prev Next Up Title Contents Index

Muodostaja (constructor) ja hajottaja (destructor)

C++:ssa on kaksi erikoista jäsenfunktiota (metodia): muodostaja (constructor) ja hajottaja (destructor). Näiden nimet ovat aina luokan_nimi ja ~luokan_nimi. Funktioiden tehtävänä on huolehtia luokan alustuksesta ja hajottamisesta. Alustus tehdään kun olion vaikutusalue alkaa ja hajottaminen vastaavasti kun se loppuu. Muodostajalla voi olla useita muotoja, hajottajalla vain yksi.

string.cpp - malli useasta konstruktorista, muodostajasta

	/* STRING.CPP */
	#include <stdio.h>
	#include <string.h>
	#include <stdlib.h>
	
	class cJono{
	  char *s;
	  int max_pit;
	  int pit;
	public:
	
	  cJono(char *p) {   /* Rakentaja jos alustus merkkijonolla */
	    max_pit = pit = strlen(p);
	    s = (char *)malloc(pit+1); // Huom! Oikeasti new kunhan opitaan
	    if ( !s ) pit = max_pit = 0;
	    else { strcpy(s,p); max_pit = pit; }
	  }
	
	  cJono(int l=255) { /* Rakentaja jos kutsu kokonaisluvulla */
	    pit = 0;
	    max_pit = l;
	    s = (char *)malloc(max_pit+1);
	    if ( !s ) max_pit = 0;
	  }
	
	  ~cJono() {         /* Hävitys aina merkkijonon poisto     */
	    free(s); pit = max_pit = 0;
	  }
	
	
	  int pituus() const { return pit; }
	
	  char kirjain(int i=0) const { if (i<pit) return s[i]; return '#'; }
	
	  int sijoita(char *p) {
	    strncpy(s,p,max_pit); s[max_pit]=0;
	    return pit = strlen(s);
	  }
	
	  void tulosta(char *fmt="%s\n") const { if ( pit > 0 ) printf(fmt,s); }
	
	};
	
	
	int main(void)
	{
	  cJono kissa("Kissa"),kana(4);
	  kana.sijoita("Kana");
	  kissa.tulosta();                   // Kissa
	  kana.tulosta();                    // Kana
	  kissa.sijoita("Muuttohaukka");     // Muutt
	  kissa.tulosta();
	  return 0;
	}
Huomattakoon, ettei kumpikaan muodostaja eikä hajottaja ole pakollinen. Näin on teoriassa, käytännössä kumpikin on parasta kirjoittaa!


Prev Next Up Title Contents Index