DOMANDA Come faccio a creare un vettore ad oggetti di due tipi contemporaneamente?

Pubblicità
Inizia ad utilizzare using invece di typedef, sarebbe quindi using ptrLibro = Libro *.

Ritornando al codice quindi alla fine è molto simile al typedef differenze con il
Codice:
using
?
Non c'è sul mio libro ho fatto il
Codice:
namespace
e lo ho usato solo in quel caso
Codice:
using
sbloccare la "visibilità" di un
Codice:
namespace
, potresti dirmi se puoi come funziona e la differenza tra un
Codice:
using
un
Codice:
typedef
?


C++:
class Libro { };

class Libreria
{
private:
    Libro* ptr;
    size_t size; // stdlib.h/cstdlib
public
    Libreria(size_t s)
        : size(s),
        ptr(new Libro[size])
    { }
    Libreria()
        : Libreria(50)
    { }
};

Qui hai usato un using anche su
Codice:
size_t size;
non capisco cosa vuoi dire con
C++:
// stdlib.h/cstdlib

È molto importante ricordarsi nel distruttore:
C++:
~Libreria()
    {
        ...
        delete[] ptr;
    }


In alternativa un bel unique_ptr

E' sempre un STL giusto?

C++:
class Libreria
{
private:
    unique_ptr<Libro> ptr;
    size_t size; // stdlib.h/cstdlib
public:
    Libreria(size_t s)
        : size(s),
        ptr(make_unique<Libro>(size))
    { }
    Libreria()
        : Libreria(50)
    { }
    ~Libreria()
    {
        ...
    }
};

Come vedi non devi distruggere tu il puntatore. Ma pensa che con un std::vector avevi pure push_back(), pop_back(), resize() ecc...

Si si interessante forse la prof ci vuole proprio far allenare sulle liste, pile, code e vettori ecc... Perciò non ce lo ha spiegato
 
Com'è il C++20 il mio forse sta all'undici, ma in che cosa è meglio Java e in cosa è meglio C++? In che campi si preferisce usare uno oppure un altro? Di certo non voglio certo non voglio chiederti tutte le nuove migliorie del C++17, ma sono molto curioso, come è cambiato rispetto a credo al C++ che sto studiando? Ci sono sbocchi per chi sa programmare bene in c++? Ci sono manuali in giro? Vorrei farmi una lista di libri da leggere dopo aver fatto l'esame come mio hobby tu cosa mi consigli di mettere nella lista? Ci vuole molto per padroneggiare il C++17? Tu quanto tempo ci hai messo? Si riescono a trovare lavori da fare e affiancarli allo studio?Altri consigli da darmi?
Padroneggiare il C++? È qualcosa di impossibile. Ci sarà sempre qualcuno che sa far meglio di te con meno righe di codice. Ma sicuramente non c’è nessuno che sa usare appieno il C++.
Ad ogni aggiornamento di C++ aggiungono qualcosa, nulla nel Core solitamente ma sono nella STL. C++11 è ok, ha le lambda, ha i puntatori intellligenti, ha constexpr e noexcept(); ma se vuoi utilizzare certi tipi di espansione nei parameter pack serve C++17.
E invece il C# che differenze ha con il C++? Io ora sto usando il DevC++ come compilatore obbligato dalla mia università tutti mi dicono che fa cagare cosa mi consigliate?
DevC++ è in IDE, non un compilatore. Il compilatore è MinGW. DevC++ non va assolutamente vecchio perché non più supportato. Ora come ora andrebbe usato VisualStudio17 come IDE.

C# è Java sotto steroidi. Con C e C++ ha nulla a che fare.
 
Ritornando al codice quindi alla fine è molto simile al typedef differenze con il
Codice:
using
?
Non c'è sul mio libro ho fatto il
Codice:
namespace
e lo ho usato solo in quel caso
Codice:
using
sbloccare la "visibilità" di un
Codice:
namespace
, potresti dirmi se puoi come funziona e la differenza tra un
Codice:
using
un
Codice:
typedef
?


C++:
class Libro { };

class Libreria
{
private:
    Libro* ptr;
    size_t size; // stdlib.h/cstdlib
public
    Libreria(size_t s)
        : size(s),
        ptr(new Libro[size])
    { }
    Libreria()
        : Libreria(50)
    { }
};

Qui hai usato un using anche su
Codice:
size_t size;
non capisco cosa vuoi dire con
C++:
// stdlib.h/cstdlib

È molto importante ricordarsi nel distruttore:
C++:
~Libreria()
    {
        ...
        delete[] ptr;
    }




E' sempre un STL giusto?

C++:
class Libreria
{
private:
    unique_ptr<Libro> ptr;
    size_t size; // stdlib.h/cstdlib
public:
    Libreria(size_t s)
        : size(s),
        ptr(make_unique<Libro>(size))
    { }
    Libreria()
        : Libreria(50)
    { }
    ~Libreria()
    {
        ...
    }
};



Si si interessante forse la prof ci vuole proprio far allenare sulle liste, pile, code e vettori ecc... Perciò non ce lo ha spiegato
typedef e using sono alias. Considerando che siamo su C++ è meglio utilizzare using.

size_t è un tipo definito in <cstdlib>/<stdlib.h>.

unique_ptr fa parte della STL (e infatti fa parte del namespace std). STL è la Standard Template Library.

Comunque in questi casi andrebbe utilizzato std::vector perché se il codice generasse eccezioni sarebbero cavoli
 
Padroneggiare il C++? È qualcosa di impossibile. Ci sarà sempre qualcuno che sa far meglio di te con meno righe di codice. Ma sicuramente non c’è nessuno che sa usare appieno il C++.
Ad ogni aggiornamento di C++ aggiungono qualcosa, nulla nel Core solitamente ma sono nella STL. C++11 è ok, ha le lambda, ha i puntatori intellligenti, ha constexpr e noexcept(); ma se vuoi utilizzare certi tipi di espansione nei parameter pack serve C++17.

DevC++ è in IDE, non un compilatore. Il compilatore è MinGW. DevC++ non va assolutamente vecchio perché non più supportato. Ora come ora andrebbe usato VisualStudio17 come IDE.

C# è Java sotto steroidi. Con C e C++ ha nulla a che fare.
Vabbè ho capito c'è sempre da imparare con c++ ma ora per definirsi programmatori in C++ cos'è che bisogna saper fare quali sono le basi? Dove si preferisce il C++ e dove lo Java? VisualStudio17 come IDE pensavo che fosse solo un ambiente dedica a C# mi hanno consigliato CodeBlocks com'è?
 
Vabbè ho capito c'è sempre da imparare con c++ ma ora per definirsi programmatori in C++ cos'è che bisogna saper fare quali sono le basi? Dove si preferisce il C++ e dove lo Java? VisualStudio17 come IDE pensavo che fosse solo un ambiente dedica a C# mi hanno consigliato CodeBlocks com'è?
CodeBlocks è un buon IDE ma sinceramente VisualStudio tutta la vita.
Per definirsi programmatori C++ bisogna saper utilizzare le funzionalità nel Core e nella STL, che non saranno mai tutte visto che pure il creatore del linguaggio sa appena il 70% di esso. Java lo si preferisce se hai bisogno di codice che vada in tante piattaforme a partire da un unico eseguibile (che in realtà è bytecode). Ora come ora Java va lasciato stare.
 
Sicuramente voglio imparare bene ad usare C++ prima, ma al livello di sicurezza Java so che usa le macchina virtuali e generano spesso errori è ancora così? Tipo nel mondo dei videogiochi lo si preferisce anche allo Java.
Ma per la creazione di applicazioni con c++ con interfaccia che usano il mouse e che abbiano tasti ecc.. Per me è ancora lunga la strada secondo te?
 
Sicuramente voglio imparare bene ad usare C++ prima, ma al livello di sicurezza Java so che usa le macchina virtuali e generano spesso errori è ancora così? Tipo nel mondo dei videogiochi lo si preferisce anche allo Java ma per la creazione di applicazioni con c++ con interfaccia che usano il mouse e che abbiano tasti ecc.. E' ancora lunga la strada?
Java è un linguaggio interpretato. E pure tanti altri lo so, come il famosissimo Python.

C++ è usato nei videogiochi perché più vicino all’hardware, ma nessuno vieta di utilizzare C# per giochi, ma anche JavaScript, Java ecc...
 
Sintatticamente Java sembra molto simile al C++ perche' hanno la stessa struttura e condividono molte keyword, ma sono due linguaggi completamente diversi. Difficile esprimersi in un paragrafo, ti consiglio di partire da qui:
https://en.wikipedia.org/wiki/Comparison_of_Java_and_C++
In poche parole, C++ e' una estensione del C, per cui ha le stesse ideosincrasie (puntatori, per esempio, e controllo della memoria solo e completamente manuale).
Il Java invece nasce da un paradigma completamente diverso.

Il C# e' invece molto piu' simile a Java, in quanto come il Java si appoggia a un virtuale "run time engine" (CLR o Common Language Runtime) tipico della piattaforma Microsoft .NET, simile al Java Virtial machine) Chiedo scusa per tutte queste buzzwords... Tanto per farti capire che chi studia informatica non deve affossarsi su un linguaggio, occorre studiarne molti (poi nell'ambiente di lavoro ci si specializzera' su alcuni)

Uno dei motivi che a scuola si preferisce insegnare C++ e' che e' il piu' complicato e permette di fare di tutto, a tutti i livelli. Una volta imparato C++ imparare altri linguaggi e' una bazzecola, mentre non e' vero il contrario.

Non ho mai provato DevC++, ma non direi che faccia schifo, e' usato da molti. E' sempre meglio che niente, venti anni fa non avevamo nessuna di queste suite di programmazione, si usava gcc per compilare e gdb per il debugger, che giravano sul terminale (!) quindi occorreva imparare tutti i comandi a memoria! Ma funzionavano OVUNQUE. Perfino CodeBlock e' meglio di niente. DevC++ almeno ti introduce al concetto di programming suite, quando andrai a a lavorare passerai tutto il tuo tempo usandole (al momento ho tre progetti aperti su tre diversi DevStudio (la versione Microsoft)
 
Java è un linguaggio interpretato. E pure tanti altri lo so, come il famosissimo Python.

C++ è usato nei videogiochi perché più vicino all’hardware, ma nessuno vieta di utilizzare C# per giochi, ma anche JavaScript, Java ecc...
Beh, qui entriamo in un discorso complesso. No, in generale Java NON e' solo interpretato, o meglio lo puo' essere, dipende dalla implementazione del JVM. Lo stesso per il C# e il CLR. Ormai i moderni compilatori e ambienti virtuali preferiscono il JIT (compilazione just-in-time, che all'inizio faceva schifo, adesso e' una scheggia). Lo stesso vale ormai anche per Python, che puo' essere anche compilato in "bytecode". Ma qui entriamo in un discorso molto particolare.
 
Beh, qui entriamo in un discorso complesso. No, in generale Java NON e' solo interpretato, o meglio lo puo' essere, dipende dalla implementazione del JVM. Lo stesso per il C# e il CLR. Ormai i moderni compilatori e ambienti virtuali preferiscono il JIT (compilazione just-in-time, che all'inizio faceva schifo, adesso e' una scheggia). Lo stesso vale ormai anche per Python, che puo' essere anche compilato in "bytecode". Ma qui entriamo in un discorso molto particolare.
Bella l'immagine di profilo dovrebbe essere mario andretti? Scusate se vi sto facendo migliaia di domande grazei mille per tutti i suggerimenti :ok:
Però ve ne devo fare un altra di domanda sto imparando i linguaggio assembly per un altro esame di calcolatori elettronici utilizzando il linguaggio di programmazione del Motorola 6800 dopo che avrò fatto anche quest'esame avete consigli su come posso approfondire lo studio del linguaggio assembly?
 
Bella l'immagine di profilo dovrebbe essere mario andretti? Scusate se vi sto facendo migliaia di domande grazei mille per tutti i suggerimenti :ok:
Però ve ne devo fare un altra di domanda sto imparando i linguaggio assembly per un altro esame di calcolatori elettronici utilizzando il linguaggio di programmazione del Motorola 6800 dopo che avrò fatto anche quest'esame avete consigli su come posso approfondire lo studio del linguaggio assembly?

Dipende quale assembly. In base all'architettura cambia. Quello del Motorola non è lo stesso delle CPU Intel, ad esempio. Dipende quindi se vuoi iniziare lo studio di altre architetture (come Intel, appunto) o altro.
 
Dipende quale assembly. In base all'architettura cambia. Quello del Motorola non è lo stesso delle CPU Intel, ad esempio. Dipende quindi se vuoi iniziare lo studio di altre architetture (come Intel, appunto) o altro.
Si si ho capito ma esistono diciamo architettura e linguaggi di base di ogni famiglia di cpu? Ad esempio quelli della Intel si assomigliano o cambiano così tanto da versione una versione del 2010 a un di oggi? E' troppo lungo come lavoro?
 
Si si ho capito ma esistono diciamo architettura e linguaggi di base di ogni famiglia di cpu? Ad esempio quelli della Intel si assomigliano o cambiano così tanto da versione una versione del 2010 a un di oggi? E' troppo lungo come lavoro?

Dipende anche qui dall'architettura specifica.
Esiste x86, ma da anni ormai si vedono solo CPU a 64bit (x64).

Si tratta ormai di CPU molto complesse. La natura stessa delle CPU CISC (Complex Instruction Set Computer) lo è. Esistono poi un sacco di set di istruzioni che apportano nuove aggiunte.
In generale, se vuoi studiare Intel, ti conviene ancora mettere mano su 8086. Senza soffermarti molto su concetti relegati all'epoca. 8086 è già complessa, ma è molto più semplice delle CPU attuali; in questo modo però riuscirai ad apprendere un pò di concetti che sono validi tuttora (e poi, i registri attuali sono un'estensione).
Puoi iniziare a dare un occhio al mio articolo che trovi in questa sezione se vuoi.

PS. scusa se ho risposto tagliando corto, ma sono un pò di fretta. Se hai domande torno a rispondere più tardi, probabilmente.
 
Tornando alla questione originaria... ma fare un diagramma delle classi coinvolte proprio no?
Un libro è un libro (=una classe), un libro scientifico al più lo puoi definire come sottoclasse di libro (sempre che serva, altrimenti basta una stinga/attributo tipoLibro). Una libreria, proprio come nel mondo reale, non è un libro, contiene libri; una libreria a 50 posizioni è un banalissimo array a 50 posizioni (50 oggetti tutti dello stesso tipo: libro) oppure, se vuoi complicarti la vita una matrice (di oggetti) 5x10 o 10x5 o 2x25 o 25x2 (se la metti in una stanza alta 8-10 metri!).

Che io ricordi, per programmare a livello universitario per i corsi base di programmazione con C/C++ basta e avanza un complilatore decente qualsiasi (solitamente GCC) abbinato ad un editor che abbia almeno la sintassi colorata, o a un IDE semplice (sotto Windows per es va bene CodeBlocks). Quando mai chiedono l'uso di STL? Magari in corsi più avanzati di programmazione a oggetti, non in fondamenti di informatica/programmazione-1
 
E invece il C# che differenze ha con il C++? Io ora sto usando il DevC++ come compilatore obbligato dalla mia università tutti mi dicono che fa cagare cosa mi consigliate?

Il C++ viene utilizzato largamente nella scrittura di kernel, engine di motori grafici, alcuni servizi dove le performance contano davvero. Nel mondo web la presenza è molto scarsa "ad alto livello", cosa che cambia se sviluppi i linguaggi stessi (es. PHP e relativi moduli).

Nel 2009 viene annunciato golang da Google, che si vuole porre come nuovo e potente linguaggio di programmazione atto alla standardizzazione del codice e facilità di sviluppo, non disgiunti da performance di linguaggi come appunto il C++. Da allora tutti i nuovi servizi che Google crea o refattorizza vengono infatti sviluppati in tale linguaggio. Go è un linguaggio imperativo, non ad oggetti e... per quanto possa sembrare assurdo all'inizio, non ti viene la bile su! Da quando l'ho provato ho subito provato amore per quel linguaggio.

C#? Java? Sono linguaggi compilati JIT, vedili come una pappetta pronta (in parte pre-compilata) pronta da essere digerita dalla virtual machine ed eseguiti... questo comporta il fatto che possono essere facilmente portati su più sistemi operativi, cosa che lo è effettivamente. Sono linguaggi sempre ad oggetti, onestamente credo che ad oggi si inseguano a vicenda, ma... che ne dici se ti dicessi che il futuro di Java non è Java, ma Kotlin? Nato per essere Java-compatibile, sembra un misto di ECMAScript, python e simili, atto a semplificare di molto la sintassi di Java. Pure Oracle ci sta lavorando sopra.

Tutto questo per dire: ci sono un'infinità di linguaggi, molti dei quali probabilmente prenderanno piede ed altri vedranno il declino, oppure verranno ridimensionati. Per ora focalizzati pure sul C++ che è una grande palestra di vita... io dal C++ non ci ho messo molto a passare al PHP (linguaggio che mi permette di comprarmi la pagnotta ad oggi!), ma ho conosciuto ed apprezzo molto altri linguaggi (come il Grande amOre :D ).

EDIT: mi sono perso la seconda pagina :D

P.S.
DevC++ è semplicemente un software dell'era anti-diluviana, ma fa perfettamente il suo lavoro. Alternative? CLion, a pagamento, per esempio. Ma anche vim :fumato: no joking. Atom, SublimeText... chi più ne ha, più ne metta.
 
Pubblicità
Pubblicità
Indietro
Top