Video: Abstract Factory Design Pattern 2025
En abstrakt klasse i C ++ er en klasse med en eller flere rene virtuelle funktioner. En ren virtuel -funktion er en virtuel medlemsfunktion, der er markeret som ingen implementering. Mest sandsynligt har den ingen implementering, fordi ingen gennemførelse er mulig med de oplysninger, der gives i klassen, herunder eventuelle basisklasser.
En konventionel, ikke-ren virtuel funktion kaldes en betonfunktion (bemærk at en konkret funktion kan være virtuel - desværre bruger C ++ dette udtryk til at betyde polymorfe.
Syntaxen til at erklære en ren virtuel funktion er demonstreret i følgende klasse: Konto:
// Konto - Denne klasse er en abstrakt klassekonto Konto: Konto (usigneret accNo, double initialBalance = 0. 0); // adgangsfunktioner usigneret int accountNo (); double acntBalance (); statisk int noAccounts (); // transaktionsfunktioner ugyldig indbetaling (dobbelt beløb); // følgende er en ren virtuel funktion virtuel ugyldig tilbagekaldelse (dobbelt beløb) = 0; beskyttet: // holde konti i en linket liste, så der er ingen grænse // til antallet af konti statisk int count; // antal konti usigneret accountNumber; double balance;};
= 0 efter tilbagekaldelseserklæringen () angiver, at programmøren ikke har til hensigt at definere denne funktion. on er en pladsholder til underklasserne. Underklassen Konto forventes at tilsidesætte denne funktion med en konkret funktion. Programmøren skal sørge for en implementering for hver medlemsfunktion, der ikke er angivet rent virtuelt.
Nogle programmører mener, at denne notation er dum. Men det er her at blive, så du skal bare lære at leve med det. Der er en grund, hvis ikke ligefrem en begrundelse for denne notation. Hver virtuel funktion skal have en post i et specielt bord.
Denne post indeholder adressen til funktionen. Formentlig, i det mindste på et tidspunkt var indtastningen for en ren virtuel funktion 0. Under alle omstændigheder er det den syntaks du sidder fast med nu.
En abstrakt klasse kan ikke instanseres med et objekt; det vil sige, du kan ikke gøre et objekt ud af en abstrakt klasse. For eksempel er følgende erklæring ikke lovlig:
void fn () {// erklære en konto med 100 dollars konto acnt (1234, 100,00); // dette er ikke lovlig acnt. tilbagetrækning (50); // hvad ville du forvente} // dette opkald til at gøre?
Hvis erklæringen blev tilladt, ville det resulterende objekt være ufuldstændigt og manglede i nogen form for evne. Hvad skal for eksempel det foregående opkald gøre? Husk, at der ikke er nogen konto:: tilbagekaldelse () .
Abstrakte klasser tjener som basisklasser for andre klasser. En Konto indeholder alle de egenskaber, der er knyttet til en generisk bankkonto. Du kan oprette andre typer bankkonti ved at arve fra Konto.
Det tekniske udtryk er instantiate . Du siger, at klassen Konto ikke kan instantieres med en genstand eller en given genstand, som indebærer klassen Savings .