La domanda dice tutto davvero. Mi è permesso ricavare una classe da una struct, o dovrei creare una classe che incorpori la mia struct e definisca i costruttori di copia e l'operatore an = per spostarsi tra i due?in C++, posso ricavare una classe da una struct
risposta
In C++ struct
è (quasi) un class
(ad eccezione del diverso livello di accesso predefinito), quindi sì, è possibile.
struct A {
// fields are public by default
};
class B: public A {
// fields are private by default
};
Non ho familiarità con MFC, ma sembra che un tentativo di mantenere sia C e le API C++.
Grazie per quello. Ero abbastanza sicuro che fosse ok, ma non l'avevo mai visto in pratica. –
Certo che lo sei. Ciò che è diverso per quanto riguarda l'ereditarietà è che se si definisce una classe, essa erediterà private da altre classi/strutture. Se si definisce una struct e derivi da una classe o struct, sarà un'eredità pubbliche per impostazione predefinita:
// the following two are equivalent except that one time class is
// used and the other time struct
struct f : g { };
class f : public g { };
Se vi domandate come si dovrebbe avvolgere le strutture C - io li incorporare come membro nella classe . Perché le strutture C non sono state progettate per essere ereditate da (si pensi al distruttore non protetto né virtuale nelle strutture C - non possono averne uno). Sono semplici aggregati che raccolgono dati. E metterli come membri li usa come tali (come in "un punto ha una coppia di xe una coordinata y").
Le strutture C espongono anche membri che probabilmente non dovrebbero essere esposti nella classe. Il contenimento consente un controllo preciso su ciò che è esposto e ciò che non avviene con le funzioni get/set e si può ancora lasciargli dare una copia o un riferimento all'oggetto C struct nudo contenuto.
Sì. puoi ricavare una classe da una struttura. In C++, una struct è semplicemente una classe in cui l'accesso predefinito è pubblico piuttosto che privato. Derivare una classe da una struttura che aggiunge solo funzioni membro non virali e/o funzioni statiche è una tecnica utile per fornire un'interfaccia C++ mantenendo la compatibilità con un'API in stile C.
Questo è esattamente l'approccio utilizzato da MFC per molte delle strutture C (contrariamente a quanto dichiarato nella domanda).
Ad esempio, la classe CRect è pubblicamente derivata da struct tagRECT (il nome più comunemente usato RECT è un typededf per struct tagRECT). Poiché struct tagRECT definisce tutti i membri dei dati e CRect aggiunge solo funzioni membro non virtuali, il layout di memoria di CRects e RECT è identico: è possibile utilizzare un CRect come argomento per qualsiasi funzione prevista in RECT e viceversa.
- 1. Ricavare una classe template da sé in C++
- 2. Posso "estendere" una struct in C?
- 3. c'è una differenza tra una struct in C++ e una struct in C#?
- 4. Conversione da una struct all'altro
- 5. posso inserire un selettore C obiettivo in una struct?
- 6. array multidimensionali in una struct in C#
- 7. Come assegnare una struct C in linea?
- 8. Objective Classe C o struct?
- 9. Chiamare il puntatore funzione membro C++ da una struct
- 10. Zero-reinizializzazione una struct in C++
- 11. puntatori in una struct volatile C
- 12. significato di "questo" per una struct (C#)
- 13. Come posso usare una classe C++ da Perl?
- 14. Posso utilizzare una classe C++ in classe Python come superclasse
- 15. Mostra una finestra di messaggio da una classe in C#?
- 16. Invio di una struct da C++ a WPF utilizzando WM_COPYDATA
- 17. Posso guardare una NSNotification da un'altra classe?
- 18. Utilizzo di puntatori intelligenti in una struct o classe
- 19. Eredita da una classe Swift nell'obiettivo C
- 20. C++ Chiamare una funzione da un'altra classe
- 21. Posso trasmettere una classe derivata a una classe base privata, usando il cast in stile C?
- 22. È sicuro restituire una struct in C o C++?
- 23. Utilizzo di enumerazione da una classe (C++)
- 24. Elixir Come convertire una mappa struct ad una struct Record
- 25. restituisce {0} da una funzione in C?
- 26. Come si accede una struct nidificato all'interno di una struct
- 27. Query Linq da unire contro un elenco in una struct
- 28. Come posso implementare una classe C++ in Python, per essere chiamata da C++?
- 29. Impossibile ereditare da una classe Thread in C#?
- 30. Istanziare una classe da una stringa
Il codice classe MFC eredita dal tag struct RECT, AFAICS. – Constantin
Il mio male - il testo della domanda è cambiato. –