Standardkonstruktøren i objektorienterede programmeringssprog er en konstruktør , der kan kaldes uden argumenter .
I C++ og Java , hvis der ikke er nogen eksplicit definerede konstruktører i en klasse , så bruger compileren den implicit definerede standardkonstruktør og er normalt en null konstruktør. Hvis programmøren eksplicit kun har angivet en konstruktør med parametre, vil compileren ikke oprette en standardkonstruktør.
I C++ og Java, hvis den afledte klasse ikke eksplicit kalder basisklassekonstruktøren (i C++ i initialiseringslisten, i Java super()på første linje), så kaldes standardkonstruktøren implicit.
I C++ beskriver standarden en standardkonstruktør som en konstruktør, der kan kaldes uden at sende argumenter (inklusive en konstruktør med parametre, der har en standardværdi). [1] For eksempel:
klasse MyClass { offentligt : Min klasse (); // konstruktør er erklæret privat : int x ; }; MyClass :: MyClass () : x ( 100 ) // constructor defined { } int main () { Min klasse m ; // mens programmet kører, oprettes et objekt m OG standardkonstruktøren kaldes }Når hukommelse er dynamisk allokeret til et objekt, kan konstruktøren kaldes ved at tilføje tomme parenteser efter klassenavnet. På en måde er dette et eksplicit konstruktørkald:
int main () { MyClass * pointer = new MyClass (); // ved kørsel oprettes objektet og // standardkonstruktøren kaldes }Hvis en konstruktør har en eller flere standardparametre, er den stadig standardkonstruktøren. Hver klasse kan højst have én standardkonstruktør, enten uden parametre eller med standardparametre, som i dette eksempel:
klasse MyClass { offentligt : MyClass ( int i = 0 , std :: string s = "" ); // konstruktør er erklæret (prototype) privat : int x ; int y ; std :: stringz ; _ }; MyClass :: MyClass ( int i , std :: string s ) // constructor defined { x = 100 ; y = i ; z = s ; }I C++ er standardkonstruktører essentielle, fordi de automatisk kaldes under visse omstændigheder, og derfor skal en klasse under visse forhold have en standardkonstruktør, ellers vil der opstå en fejl:
Hvis en klasse ikke definerer en standardkonstruktør, vil compileren implicit oprette en. Det vil være det samme som en eksplicit erklæret konstruktør med en tom krop. For eksempel: [2]
klasse MyClass { int x ; }; int main () { Min klasse m ; // der er ingen fejl mens programmet kører, den implicitte konstruktør kaldes }Hvis konstruktører er defineret for en klasse, men der ikke er nogen standardkonstruktør blandt dem, vil compileren ikke implicit generere en. Dette resulterer i fejl som dette eksempel:
klasse MyClass { offentligt : MyClass ( int y ); // ikke-standard konstruktørerklæring privat : int x ; }; MyClass :: MyClass ( int y ) { x = y _ } int main () { MyClass m ( 100 ); // ikke-standard konstruktør kaldet MyClass * p ; // compiler behøver ikke at vide om konstruktører, når de erklærer en pointer p = new MyClass (); // fejl på kompileringstidspunktet: ingen standardkonstruktør returnerer 0 ; }Oprettelse af et objekt, der peges ppå, vil også resultere i en fejl. [2]
På den anden side, med C++11 kan standardkonstruktøren udtrykkeligt specificeres:
klasse MyClass { offentligt : MyClass () = default ; // kraftgenerering af en standardkonstruktør };Eller eksplicit fjernet:
klasse MyClass { offentligt : MyClass () = slet ; // forhindre generering af standardkonstruktør };