Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
Analizziamo nel dettaglio DJI RS 5, l'ultimo arrivato della famiglia Ronin progettato per videomaker solisti e piccoli studi. Tra tracciamento intelligente migliorato e ricarica ultra rapida, scopriamo come questo gimbal eleva la qualità delle produzioni.
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D è la nuova CPU gaming di riferimento grazie alla 3D V-Cache di seconda generazione e frequenze fino a 5,6 GHz. Nei test offre prestazioni superiori a 9800X3D e 7800X3D, confermando la leadership AMD nel gaming su PC.
Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-07-2012, 11: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, 12: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, 12: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, 13: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, 19: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, 23: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, 19: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 19:17.
Bandit è offline   Rispondi citando il messaggio o parte di esso
Old 26-07-2012, 20: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, 21: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, 23: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, 10: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, 10: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, 12: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, 12: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 12:35.
Bandit è offline   Rispondi citando il messaggio o parte di esso
Old 27-07-2012, 14: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, 14: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, 19: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, 19: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, 11: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


DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
SpaceX sta provando le piastrelle isolan...
Il National Reconnaissance Office statun...
Volkswagen avvia la produzione su CEA: c...
La crisi delle memorie non influenzer&ag...
MoM-z14 è la galassia scoperta da...
Da Sony nuovi display professionali dell...
Com'è fatta una delle e-bike pi&u...
iPhone 16 domina il 2025: ecco la classi...
Huawei a supporto delle startup: potenzi...
Iliad è il miglior operatore di l...
Le pompe di calore parlano italiano: Bon...
Moltbot non è solo un chatbot: ag...
Sinner e Alcaraz fermati dall'arbitro: i...
L'audio-video professionale arriva a MIR...
Musk fa i complimenti alla Cina: nel set...
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: 20:47.


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