Video: Data Structures: Abstract Data Type (ADT) 2025
En abstrakt klasse i C ++ er en klasse med en eller flere rene virtuelle funksjoner. En ren virtuell -funksjon er en virtuell medlemsfunksjon som er merket som uten implementering. Sannsynligvis har det ingen implementering fordi ingen implementering er mulig med informasjonen som tilbys i klassen, inkludert noen grunnklasser.
En vanlig, ikke-ren virtuell funksjon er kjent som en konkret funksjon (merk at en konkret funksjon kan være virtuell - dessverre bruker C ++ denne termen til å bety polymorf.
Syntaxen for å erklære en ren virtuell funksjon er demonstrert i følgende klasse: Konto:
// Konto - denne klassen er en abstrakt klasseklasse Konto {offentlig: Konto (unsigned accNo, double initialBalance = 0. 0); // tilgangsfunksjoner usigned int accountNo (); double acntBalance (); statisk int noAccounts (); // transaksjonsfunksjoner ugyldig innskudd (dobbeltbeløp); // følgende er en ren virtuell funksjon virtuell ugyldig tilbaketrekking (dobbeltbeløp) = 0; beskyttet: // behold kontoer i en koblet liste så det er ingen grense // til antall kontoer statisk int count; // antall kontoer usigned accountNumber; double balance;};
= 0 etter tilbakekallingserklæringen () indikerer at programmereren ikke har til hensikt å definere denne funksjonen. på er en plassholder for underklassene. Underklassen Konto forventes å tilsidesette denne funksjonen med en konkret funksjon. Programmereren må sørge for en implementering for hver medlemsfunksjon som ikke erklæres ren virtuell.
Noen programmerere tror at dette notatet er dumt. Men det er her for å bli, så du må bare lære å leve med det. Det er en grunn, om ikke akkurat en begrunnelse, for denne notasjonen. Hver virtuell funksjon må ha en oppføring i et spesialtabell.
Denne oppføringen inneholder adressen til funksjonen. Formentlig, i det minste på en gang var oppføringen for en ren virtuell funksjon 0. Det er i alle fall syntaxen du sitter fast med nå.
En abstrakt klasse kan ikke instanseres med et objekt; det vil si, du kan ikke lage et objekt ut av en abstrakt klasse. For eksempel er følgende erklæring ikke lovlig:
void fn () {// erklære en konto med 100 dollar konto acnt (1234, 100. 00); // dette er ikke lovlig acnt. uttak (50); // hva ville du forvente} // denne samtalen å gjøre?
Hvis erklæringen ble tillatt, ville det resulterende objektet være ufullstendig, mangler i noen muligheter. For eksempel, hva skal det forrige samtalen gjøre? Husk at det ikke er noen konto:: tilbaketrekking () .
Abstrakte klasser tjener som grunnklasser for andre klasser. En Konto inneholder alle egenskapene knyttet til en generisk bankkonto. Du kan opprette andre typer bankkontoer ved å arve fra Konto.
Det tekniske uttrykket er å instantiate . Du sier at klassen Konto ikke kan instantieres med en gjenstand eller et gitt objekt, instanterer Savings -klassen.
