Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-07-2012, 10:27   #1
Bandit
Senior Member
 
L'Avatar di Bandit
 
Iscritto dal: Sep 2003
Messaggi: 9434
[C++]: Dati char e string di una classe

Ciao a tutti ragazzi
vorrei un vostro aiuto per capire.

Quando ho una classe Notebook con dei membri char
vado a definire il costruttore in questo modo

Codice:
class Notebook
{
      private:
              char*modello;
              float peso;
              float spessore;
              float pollici;
      public:
              Notebook(char*, float, float, float);
              virtual void StampaDati()const;
                  
};
Quando vado a implementare il costruttore avrò


Codice:
Notebook::Notebook(char* mod,  float ps, float spes, float mon)
{
   modello=new char[strlen(mod)+1];
   strcpy(modello, mod);
    

    peso=ps;
   spessore=spes;
   pollici=mon;
   
}
Se invece ho una classe con dati string



Codice:
class Notebook
{
      private:
              string modello;
              float peso;
              float spessore;
              float pollici;
      public:
              Notebook(string, float, float, float);
              virtual void StampaDati()const;
                  
};

vado ad implementare

Codice:

Notebook::Notebook(string mod= " ",  float ps, float spes, float mon)
{
   Modello=mod;
    

    peso=ps;
   spessore=spes;
   pollici=mon;
   
}


Se invece avessi una string allocata dinamicamente, come andrebbe implementato il costruttore?
__________________
1)P4 2.4-Asrock p4i65- Sapphire Hd3450 512mb agp- 2GB ddr400-Hd 80gb WD- Thermaltake Litepower 450W
2)Amd 3200-Msi K8n Neo4 Platinum - 2*512 MB pc3200-Asus N6600gt- HD WD 160GB-enermax noisetacker 370.
Bandit è offline   Rispondi citando il messaggio o parte di esso
Old 25-07-2012, 11:19   #2
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Quote:
Originariamente inviato da Bandit Guarda i messaggi
Se invece avessi una string allocata dinamicamente, come andrebbe implementato il costruttore?
Codice:
class Notebook
{
      private:
              string* modello;
              float peso;
              float spessore;
              float pollici;
      public:
              Notebook(char*, float, float, float);
              virtual void StampaDati()const;
                  
};
Codice:
Notebook::Notebook(string &mod,  float ps, float spes, float mon)
{
   modello = new string(mod);
 
   peso = ps;
   spessore = spes;
   pollici = mon;
   
}
oppure

Codice:
Notebook::Notebook(string *mod,  float ps, float spes, float mon)
{
   modello = mod;
 
   peso = ps;
   spessore = spes;
   pollici = mon;
   
}
Nel primo gli dai in pasto una stringa per valore e crei dinamicamente l'istanza di stringa dentro al costruttore.
Nel secondo caso l'istanza di stringa è stata già creata quindi tu gli passi solo il puntatore e lo copi ne relativo campo modello (questa seconda versione però te la sconsiglio perchè permette di modificare la stringa modello anche dall'esterno della classe).
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 25-07-2012, 11:45   #3
Bandit
Senior Member
 
L'Avatar di Bandit
 
Iscritto dal: Sep 2003
Messaggi: 9434
Grazie mille Kendall del chiarimento
avrei dei dubbi:
nell'implementazione non ci vuole una cosa tipo strcpy(modello , char)

Codice:
Notebook::Notebook(string &mod,  float ps, float spes, float mon)
{
   modello = new string(mod);    //questa istruzione non crea solo spazio?
    strcpy(modello , char)
   peso = ps;
   spessore = spes;
   pollici = mon;
   
}




e se facessi un ibrido è scorretto?
mi spiego:


Codice:
class Notebook
{
      private:
              string* modello;
              float peso;
              float spessore;
              float pollici;
      public:
              Notebook(string*, float, float, float);
              virtual void StampaDati()const;
                  
};

facendo così è come se la stringa fosse statica?
Codice:
Notebook::Notebook(string mod=" ",  float ps, float spes, float mon)
{
   modello = new string(mod);
 
   peso = ps;
   spessore = spes;
   pollici = mon;
   
}
__________________
1)P4 2.4-Asrock p4i65- Sapphire Hd3450 512mb agp- 2GB ddr400-Hd 80gb WD- Thermaltake Litepower 450W
2)Amd 3200-Msi K8n Neo4 Platinum - 2*512 MB pc3200-Asus N6600gt- HD WD 160GB-enermax noisetacker 370.
Bandit è offline   Rispondi citando il messaggio o parte di esso
Old 25-07-2012, 12:28   #4
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Quote:
Originariamente inviato da Bandit Guarda i messaggi
Grazie mille Kendall del chiarimento
avrei dei dubbi:
nell'implementazione non ci vuole una cosa tipo strcpy(modello , char)
La funzione strcpy serve solo per la copia di stringhe in formato c.
Nel momento stesso in cui ti affidi alla classe string ti astrai da questo tipo di considerazioni (anche se internamente all'implementazione di string vengono utilizzate queste funzioni di basso livello).
Nel caso particolare al costruttore di string dai come argomento il valore di "mod"
che verrà utilizzato da string per assegnare al tuo campo "modello" una nuova istanza con il valore indicato da mod.
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 25-07-2012, 18:50   #5
bender86
Member
 
L'Avatar di bender86
 
Iscritto dal: Mar 2008
Messaggi: 47
Non vedo distruttori... Se nel costruttore allochi qualcosa con new (o new[]) devi anche deallocarlo con delete (o delete[]) nel distruttore. Inoltre sarebbe meglio usare le liste di inizializzazione.

Codice:
Notebook::Notebook(char* mod,  float ps, float spes, float mon)
  : modello(0),
    peso(ps),
    spessore(spes),
    pollici(mon)
{
    modello = new char[strlen(mod)+1];
    strcpy(modello, mod);
}

Notebook::~Notebook()
{
    delete [] modello;
}

Quote:
e se facessi un ibrido è scorretto?
Non è che sia scorretto, ma quale sarebbe il vantaggio rispetto ad usare (std::)string? In linea di massima se puoi fare una cosa senza usare puntatori, new e delete quello è il modo migliore per farla.


Quote:
nell'implementazione non ci vuole una cosa tipo strcpy(modello , char)

Codice:
Codice:
modello = new string(mod);    //questa istruzione non crea solo spazio?
strcpy(modello , char);
Stai chiamando il costruttore di copia di 'string'. Il costruttore di copia dovrebbe costruire una copia di un oggetto, quindi a 'modello' viene assegnata una copia di 'mod'.
Ho detto "dovrebbe" perché non è che sia obbligatorio, ma normalmente è così (per std::string è così di sicuro).
bender86 è offline   Rispondi citando il messaggio o parte di esso
Old 25-07-2012, 22:00   #6
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Come la scriverei io:

Codice:
class Notebook
{
      private:
              std::string modello;
              float peso;
              float spessore;
              float pollici;
      public:
              Notebook(const std::string &, float, float, float);
              virtual ~Notebook(); //Dato che hai definito un metodo virtuale... In ogni caso un distruttore virtuale male non fa :D 
              virtual void StampaDati()const;                  
};

Notebook::Notebook(const std::string & mod,  float ps, float spes, float mon) : modello(mod), peso(ps), spessore(spes), pollici(mon)
{ }
Allocare dinamicamente std::string secondo me non ha molto senso, è solo un contenitore per qualcosa che è già allocato dinamicamente.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 26-07-2012, 18:10   #7
Bandit
Senior Member
 
L'Avatar di Bandit
 
Iscritto dal: Sep 2003
Messaggi: 9434
ciao ragazzi
grazie per avermi risposto
ovviamente per l'estensione dinamica ci vuole il ditruttore, ma non l'avevo messo poichè non era quello il punto



questo comando " std::string " non l'ho mai visto. che cosa fa di preciso?



questo è bello, ma se ho appunto un char *........
Codice:
Notebook::Notebook(char* mod,  float ps, float spes, float mon)
  : modello(0),
    peso(ps),
    spessore(spes),
    pollici(mon)
{
    modello = new char[strlen(mod)+1];
    strcpy(modello, mod);
}

Notebook::~Notebook()
{
    delete [] modello;
}
__________________
1)P4 2.4-Asrock p4i65- Sapphire Hd3450 512mb agp- 2GB ddr400-Hd 80gb WD- Thermaltake Litepower 450W
2)Amd 3200-Msi K8n Neo4 Platinum - 2*512 MB pc3200-Asus N6600gt- HD WD 160GB-enermax noisetacker 370.

Ultima modifica di Bandit : 26-07-2012 alle 18:17.
Bandit è offline   Rispondi citando il messaggio o parte di esso
Old 26-07-2012, 19:17   #8
lorenzo001
Senior Member
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
Non è un "comando"

std::string

è una classe della libreria standard, usata per istanziare oggetti stringa standard del C++
lorenzo001 è offline   Rispondi citando il messaggio o parte di esso
Old 26-07-2012, 20:27   #9
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Esattamente come dice Lorenzo.
Per dirla in maniera alternativa, l' "std" è il namespace standard che raccoglie tutte le classi standard (per l'appunto). Quindi come tu, in ogni qual caso crei un namespace utilizzi lo specificatore di namespace (il " :: " ) così fai con quello standard (non vi è alcuna differenza alcuna). L'alternativa più comune è quella di includere il namespace con la ben nota dicitura " #include namespace std"
Ma come ti è stato detto tutto ciò riguardo solo e semplicemente il sistema di namespace.
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 26-07-2012, 22:33   #10
__ZERO_UNO__
Member
 
L'Avatar di __ZERO_UNO__
 
Iscritto dal: Jul 2009
Città: Milano
Messaggi: 270
Quote:
Originariamente inviato da [Kendall] Guarda i messaggi
L'alternativa più comune è quella di includere il namespace con la ben nota dicitura " #include namespace std"
La ben nota dicitura non è "using namespace std", o sbaglio?
__________________

AMD PII x4 955 BE | Sapphire HD4850 Vapor-X 1 GB | Samsung SpinPoint F1 500GB | Samsung EcoGreen F4 2TB
Gigabyte GA-MA790FXT-UD5P | Fractal Design Define R3 USB3.0 Titanium Grey | CORSAIR 650W CMPSU-650TX
Noctua U12P SE2 | 2 x 2GB Kingston 1333 MHz | Samsung SyncMaster P2450 | Samsung SyncMaster T200
__ZERO_UNO__ è offline   Rispondi citando il messaggio o parte di esso
Old 27-07-2012, 09:31   #11
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Quote:
Originariamente inviato da __ZERO_UNO__ Guarda i messaggi
La ben nota dicitura non è "using namespace std", o sbaglio?

Uops, touchè... Ultimamente mi sto dedicando al C# dove si utilizza sempre l' "#include" (anche se in senso leggermente diverso dal concetto di namespace), da questo l'errore.

Hai ovviamente ragione tu
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 27-07-2012, 09:40   #12
__ZERO_UNO__
Member
 
L'Avatar di __ZERO_UNO__
 
Iscritto dal: Jul 2009
Città: Milano
Messaggi: 270
La qualità dei tuoi interventi sul forum mi ha fatto pensare che potessi essere io a sbagliarmi e che mi fossi rimbambito, quindi ho messo il punto di domanda.
__________________

AMD PII x4 955 BE | Sapphire HD4850 Vapor-X 1 GB | Samsung SpinPoint F1 500GB | Samsung EcoGreen F4 2TB
Gigabyte GA-MA790FXT-UD5P | Fractal Design Define R3 USB3.0 Titanium Grey | CORSAIR 650W CMPSU-650TX
Noctua U12P SE2 | 2 x 2GB Kingston 1333 MHz | Samsung SyncMaster P2450 | Samsung SyncMaster T200
__ZERO_UNO__ è offline   Rispondi citando il messaggio o parte di esso
Old 27-07-2012, 11:06   #13
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Quote:
Originariamente inviato da __ZERO_UNO__ Guarda i messaggi
La qualità dei tuoi interventi sul forum mi ha fatto pensare che potessi essere io a sbagliarmi e che mi fossi rimbambito, quindi ho messo il punto di domanda.
Ti ringrazio
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 27-07-2012, 11:27   #14
Bandit
Senior Member
 
L'Avatar di Bandit
 
Iscritto dal: Sep 2003
Messaggi: 9434
ok grazie ragazzi

rileggendo il codice di bender
Codice:
Notebook::Notebook(char* mod,  float ps, float spes, float mon)
  : modello(0),
    peso(ps),
    spessore(spes),
    pollici(mon)
{
    modello = new char[strlen(mod)+1];
    strcpy(modello, mod);
}
non è simile al mio modo ibrido?

mi spiego : con l' inizializzatore :modello(0)

nn è lo stesso di mettere
Codice:
Notebook::Notebook(string mod= " ",  float ps, float spes, float mon)


e poi un'altra particolarità
Codice:
{
    modello = new char[strlen(mod)+1];
    strcpy(modello, mod);
}
oppure questa


Codice:
{
    modello = new char(mod);
    strcpy(modello, mod);
}
non sono due cose diverse visto che in una si utilizza strlen per vedere la lunghezza di mod?
__________________
1)P4 2.4-Asrock p4i65- Sapphire Hd3450 512mb agp- 2GB ddr400-Hd 80gb WD- Thermaltake Litepower 450W
2)Amd 3200-Msi K8n Neo4 Platinum - 2*512 MB pc3200-Asus N6600gt- HD WD 160GB-enermax noisetacker 370.

Ultima modifica di Bandit : 27-07-2012 alle 11:35.
Bandit è offline   Rispondi citando il messaggio o parte di esso
Old 27-07-2012, 13:01   #15
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Quote:
Originariamente inviato da Bandit Guarda i messaggi

non è simile al mio modo ibrido?

mi spiego : con l' inizializzatore :modello(0)

nn è lo stesso di mettere
Codice:
Notebook::Notebook(string mod= " ",  float ps, float spes, float mon)
No, son due cose decisamente diverse. Nel primo caso, cioè nell'inizializzazione "modello(0)" vai ad assegnare al puntatore char modello il valore di zero, ossia equivale ad un

modello = 0;

oppure

modello = NULL;

oppure (in c++11)

modello = nullptr;

Quote:
e poi un'altra particolarità
Codice:
{
    modello = new char[strlen(mod)+1];
    strcpy(modello, mod);
}
oppure questa


Codice:
{
    modello = new char(mod);
    strcpy(modello, mod);
}
non sono due cose diverse visto che in una si utilizza strlen per vedere la lunghezza di mod?
Si sono due cose decisamente diverse perchè si riferiscono a due casi diversi. Nel primo stai assegnando ad un puntatore di char un array di char di lunghezza pari a mod (mod è una stringa stile c). Dopodichè tramite strcpy ne copi il contenuto.

Il secondo esempio invece è semplicemente errato, in quanto al puntatore a char modello vai ad assegnare un singolo char allocato dinamicamente (tra l'altro char(mod) è un costrutto non valido in quanto non puoi costruire un char da un char* (che sarebbe mod) ).
Dopodichè strcpy si troverebbe a copiare una stringa stile c di n caratteri in una puntatore che punta ad un solo carattere, e andresti pertanto in overflow.
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 27-07-2012, 13:46   #16
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da Bandit Guarda i messaggi
non è simile al mio modo ibrido?

mi spiego : con l' inizializzatore :modello(0)

nn è lo stesso di mettere
Codice:
Notebook::Notebook(string mod= " ",  float ps, float spes, float mon)
Il codice che hai scritto te è differente, il suo significato è: se non passi mod il suo valore è automaticamente assegnato a spazio. Ed è sbagliato perchè o lo sposti come ultimo parametro oppure assegni un valore di default anche agli altri.
Il codice che utilizza le liste di inizializzazione indica invece che alla variabile locale verrà assegnato il valore 0.

Quote:
e poi un'altra particolarità
Codice:
{
    modello = new char[strlen(mod)+1];
    strcpy(modello, mod);
}
oppure questa


Codice:
{
    modello = new char(mod);
    strcpy(modello, mod);
}
non sono due cose diverse visto che in una si utilizza strlen per vedere la lunghezza di mod?
La seconda che hai scritto te è proprio sbagliata.

Ma dato che parliamo di C++ perchè insistere con gli array di char???
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 27-07-2012, 18:06   #17
Bandit
Senior Member
 
L'Avatar di Bandit
 
Iscritto dal: Sep 2003
Messaggi: 9434
ragazzi è perchè non ho mai visto programmi che prevedono l'allocazione di stringhe dinamiche e quindi non so come fare quando si presenta un problema simile
__________________
1)P4 2.4-Asrock p4i65- Sapphire Hd3450 512mb agp- 2GB ddr400-Hd 80gb WD- Thermaltake Litepower 450W
2)Amd 3200-Msi K8n Neo4 Platinum - 2*512 MB pc3200-Asus N6600gt- HD WD 160GB-enermax noisetacker 370.
Bandit è offline   Rispondi citando il messaggio o parte di esso
Old 27-07-2012, 18:38   #18
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Quote:
Originariamente inviato da Bandit Guarda i messaggi
ragazzi è perchè non ho mai visto programmi che prevedono l'allocazione di stringhe dinamiche e quindi non so come fare quando si presenta un problema simile
Le tratti come tratteresti le istanze di una qualsiasi altra classe (visto che di per sè, string è proprio una classe come tutte le altre, solo fa parte della libreria standard)
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 28-07-2012, 10:04   #19
bender86
Member
 
L'Avatar di bender86
 
Iscritto dal: Mar 2008
Messaggi: 47
Esattamente cosa intendo per "stringa dinamica"? In C le stringhe non esistono, quindi si deve ricorrere ad array di caratteri spesso allocati dinamicamente. In C++ invece c'è la classe 'std::string' che non ha quasi mai bisogno di essere allocata dinamicamente (la si dovrebbe usare esattamente come un int o un double).
Se stai seguendo un corso potrebbe essere una buona idea chiedere un chiarimento al professore.


Il namespace std contiene tutta la libreria standard del C++. I namespace permettono di dare lo stesso nome a variabili, funzioni, classi... diverse. Ad esempio nella libreria standard c'è la classe 'list' (std::list) che rappresenta una lista. Magari tu vuoi implementare una classe lista che funzioni in maniera diversa. Non puoi chiamarla 'list' dato che il nome è già usato, quindi devi trovare un altro nome; in C la soluzione tipica è quella di aggiungere prefissi: 'Bandit_List', che è terribile.
Usando i namespace invece classi in diversi namespace possono avere lo stesso nome: 'std::list', 'bandit::list'. Il vantaggio è che all'interno del namespace 'bandit' puoi usare semplicemente il nome 'list', il compilatore sa che ti stai riferendo alla classe nel namespace corrente. Inoltre se sei sicuro di non usare classi con lo stesso nome puoi importare i nomi di un namespace in quello corrente usando 'using namespace abc;'.

Codice:
#include <list> // Definisce std::list.

namespace bandit {
    class list...
    
    void t()
    {
        std::list<int> a;
        list<int> b; // Equivalente a bandit::list<int> b.
    }

} // fine del namespace bandit

// Qui siamo nel namespace globale (cioè fuori da qualsiasi namespace).

int main()
{
    std::list<int> a;
    bandit::list<int> b;
    
    using namespace std; // Importa i simboli del namespace 'std' in quello corrente.
    list<int> c; // Equivalente a std::list<int> c.

}   // Qua termina l'effetto di 'using namespace std;'.

int altro()
{
    using namespace bandit; // Importa i simboli del namespace 'bandit' in quello corrente.
    list<int> a; // Equivalente a bandit::list<int> a.
}

int ultimo()
{
    using namespace std;
    using namespace bandit;
    list<int> a; // Errore, a quale ti riferisci?
    std::list<int> b; // Ok
    bandit::list<int> b; // Ok
}
bender86 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Speciale TV in offerta su Amazon: Hisens...
Non c'è pace per Trezor: 347.000 e-mail ...
È un portatile Dell e li vale tut...
Apple iPhone 17 Pro Max 256GB a 1.195€ (...
GPT-6 Astra è davvero AGI o non s...
LG OLED G6S 48'' a 845€ e G6 55'' a 1368...
Mantax Otax: il malware Android che crip...
Musk incassa un altro maxi contratto IA:...
Le vendite di EV sono esplose in tutto i...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:33.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v