Articles of dell’ereditarietà

C # Covariance sui tipi di ritorno sottoclass

Qualcuno sa perché i tipi di ritorno covarianti non sono supportati in C #? Anche quando si tenta di utilizzare un’interfaccia, il compilatore si lamenta che non è consentito. Vedi il seguente esempio. class Order { private Guid? _id; private String _productName; private double _price; protected Order(Guid? id, String productName, double price) { _id = […]

Chiamare il costruttore della class base dal costruttore della class derivata

Ho una domanda: Diciamo che in origine ho queste classi che non posso cambiare (diciamo perché sono prese da una libreria che sto usando): class Animal_ { public: Animal_(); int getIdA() { return idA; }; string getNameA() { return nameA; } private: string nameA; int idA; } class Farm { public : Farm() { sizeF=0; […]

Tabelle virtuali e layout di memoria in più eredità virtuali

Considera la seguente gerarchia: struct A { int a; A() { f(0); } A(int i) { f(i); } virtual void f(int i) { cout << i; } }; struct B1 : virtual A { int b1; B1(int i) : A(i) { f(i); } virtual void f(int i) { cout << i+10; } }; struct B2 […]

Ereditarietà e sovraccarico di metodi

Perché il compilatore C ++ dà questo errore? Perché posso accedere a lol () da B, ma non posso accedere a rofl () [senza parametri]. Dov’è il trucco? class A { public: void lol(void) {} void rofl(void) { return rofl(0);} virtual void rofl(int x) {} }; class B : public A { public: virtual void […]

Problemi con l’ereditarietà di operator = in C ++

Sto avendo problemi con l’ereditarietà dell’operatore =. Perché questo codice non funziona e qual è il modo migliore per risolverlo? #include class A { public: A & operator=(const A & a) { x = ax; return *this; } bool operator==(const A & a) { return x == ax; } virtual int get() = 0; // […]

Sovrascrivere la funzione di sovraccarico di una base in C ++

Possibile duplicato: Risoluzione di sovraccarico C ++ Mi sono imbattuto in un problema in cui, dopo che la mia class aveva annullato una funzione della sua class base, tutte le versioni sovraccaricate delle funzioni venivano nascoste. È questo di progettazione o sto facendo qualcosa di sbagliato? Ex. class foo { public: foo(void); ~foo(void); virtual void […]

Un’interfaccia può estendere più interfacce in Java?

Un’interfaccia può estendere più interfacce in Java? Questo codice sembra valido nel mio IDE e compila: interface Foo extends Runnable, Set, Comparator { } ma avevo sentito che l’ereditarietà multipla non era permessa in Java. Perché sembra esserci un’eccezione per le interfacce?

Un modo per trasmettere un tipo di base a un tipo derivato

Non sono sicuro se questa sia una cosa strana da fare o no, o se è un po ‘come l’odore del codice … ma mi stavo chiedendo se ci fosse un modo (una sorta di modello di oop sarebbe bello) per “lanciare” un tipo di base a una forma del suo tipo derivato. So che […]

Ereditarietà in Java: la creazione di un object della sottoclass richiama anche il costruttore della superclass. Perché esattamente?

Ho una domanda sull’ereditarietà in Java. Ho due classi A e B , e la class B, eredita da A: public class A { public A() { System.out.println(“Hi!”); } } public class B extends A { public B() { System.out.println(“Bye!”); } public static void main(String[] args) { B b = new B(); } } Quando […]

Come utilizzare i costruttori della class base e l’operatore di assegnazione in C ++?

Ho una class B con un insieme di costruttori e un operatore di assegnazione. Ecco qui: class B { public: B(); B(const string& s); B(const B& b) { (*this) = b; } B& operator=(const B & b); private: virtual void foo(); // and other private member variables and functions }; Voglio creare una class ereditaria […]