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 */ #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!