Una classe astratta è una classe che non può essere istanziata. Generalmente sono pensati per essere estesi / sottoclassi e generalmente hanno "metodi astratti" che devono essere implementati da sottoclassi.
"Classe astratta" e "interfaccia" sono concetti simili, con l'interfaccia che è la più astratta delle due. Un fattore di differenziazione è che le classi astratte forniscono implementazioni di metodi per le classi derivate quando necessario. In C #, tuttavia, questo fattore di differenziazione è stato ridotto dalla recente introduzione di …
Conosco la sintassi, le regole applicate alla classe astratta e voglio sapere l'uso di una classe astratta La classe astratta non può essere istanziata direttamente ma può essere estesa da un'altra classe Qual è il vantaggio di farlo? In che modo differisce da un'interfaccia? So che una classe può implementare …
Qualcuno può spiegare in dettaglio, come funziona esattamente la tabella virtuale e quali puntatori sono associati quando vengono chiamate funzioni virtuali. Se sono effettivamente più lenti, puoi mostrare che il tempo impiegato dalla funzione virtuale per eseguire è più dei normali metodi di classe? È facile perdere traccia di come …
Sebbene questo non sia obbligatorio nello standard C ++, sembra che GCC, ad esempio, implementa le classi parent, comprese quelle pure astratte, includendo un puntatore alla tabella v per quella classe astratta in ogni istanza della classe in questione . Naturalmente questo gonfia le dimensioni di ogni istanza di questa …
Come sviluppatore C ++ sono abbastanza abituato ai file di intestazione C ++ e trovo utile avere una sorta di "documentazione" forzata all'interno del codice. Di solito mi trovo in un brutto momento quando devo leggere del codice C # per questo: non ho quel tipo di mappa mentale della …
Negli anni 2000 un mio collega mi ha detto che è un anti-schema rendere virtuali o astratti i metodi pubblici. Ad esempio, ha considerato una classe come questa non ben progettata: public abstract class PublicAbstractOrVirtual { public abstract void Method1(string argument); public virtual void Method2(string argument) { if (argument == …
Considera l'esempio di seguito. Qualsiasi modifica all'enumerazione ColorChoice influisce su tutte le sottoclassi IWindowColor. Gli enum tendono a causare interfacce fragili? C'è qualcosa di meglio di un enum per consentire una maggiore flessibilità polimorfica? enum class ColorChoice { Blue = 0, Red = 1 }; class IWindowColor { public: ColorChoice …
Se il lancio System.Exceptionè considerato così male, perché non è stato Exceptionfatto abstractin primo luogo? In questo modo, non sarebbe possibile chiamare: throw new Exception("Error occurred."); Ciò imporrebbe l'uso di eccezioni derivate per fornire maggiori dettagli sull'errore che si è verificato. Ad esempio, quando voglio fornire una gerarchia di eccezioni …
Al momento ho due classi derivate Ae B, che hanno entrambe un campo in comune e sto cercando di determinare se dovrebbe andare nella classe base. Non viene mai referenziato dalla classe base, e dire se in qualche punto lungo la strada viene derivata un'altra classe C, che non ha …
Di recente ho iniziato a avvolgere la mia testa intorno a OOP, e ora sono al punto in cui più leggo delle differenze tra classi astratte e interfacce, più divento confuso. Finora, nessuno dei due può essere istanziato. Le interfacce sono schemi più o meno strutturali che determinano lo scheletro …
Ci stavo pensando e avevo dei dubbi. Quando dichiaro un'interfaccia, ad esempio: public interface MyInterface { public void method1(); public void method2(); } Questi metodi di interfaccia potrebbero essere considerati astratti? Quello che voglio dire è che il concetto di un metodo astratto è: Un metodo astratto è un metodo …
C'è una differenza tra public class A extends AbstractB implements C {...} contro... public class A extends AbstractB {...} abstract class AbstractB implements C {...} Capisco che in entrambi i casi, la classe A finirà per conformarsi all'interfaccia. Nel secondo caso, AbstractBpuò fornire l'implementazione per i metodi di interfaccia in …
Nelle risposte a questa domanda, il consenso generale era che i metodi statici non sono pensati per essere sovrascritti (e quindi le funzioni statiche in C # non possono essere virtuali o astratte). Questo non è solo il caso in C #, comunque; Anche Java lo proibisce e neanche C …
Secondo Herb Sutter si dovrebbero preferire interfacce astratte (tutte le funzioni virtuali pure) a classi astratte in C ++ per disaccoppiare l'implementazione il più possibile. Mentre personalmente trovo questa regola molto utile, recentemente mi sono unito a un team con molti programmatori Java e nel codice Java questa linea guida …
Sto studiando OOP in C ++ e, anche se sono consapevole delle definizioni di questi 3 concetti, non riesco davvero a capire quando o come usarlo. Usiamo questa classe per l'esempio: class Person{ private: string name; int age; public: Person(string p1, int p2){this->name=p1; this->age=p2;} ~Person(){} void set_name (string parameter){this->name=parameter;} void …
We use cookies and other tracking technologies to improve your browsing experience on our website,
to show you personalized content and targeted ads, to analyze our website traffic,
and to understand where our visitors are coming from.
By continuing, you consent to our use of cookies and other tracking technologies and
affirm you're at least 16 years old or have consent from a parent or guardian.