L'operatore typeid permette di determinare il tipo di un oggetto a tempo di esecuzione. In accordo con lo standard C++, questo operatore restituisce un riferimento costante ad un oggetto di tipo type_info.

Di seguito un esempio di codice:

001// expre_typeid_Operator.cpp 
002// compile with: /GR /EHsc 
003
004#include <iostream> 
005#include <typeinfo.h> 
006
007class Base { 
008public: 
009   virtual void vvfunc() {} 
010}; 
011
012class Derived : public Base {}; 
013
014using namespace std; 
015
016int main()
017{ 
018   Derived* pd = new Derived;
019   Base* pb = pd;
020   cout << typeid( pb ).name()  << endl; //prints "class Base *" 
021   cout << typeid( *pb ).name() << endl; //prints "class Derived" 
022   cout << typeid( pd ).name()  << endl; //prints "class Derived *" 
023   cout << typeid( *pd ).name() << endl; //prints "class Derived" 
024   delete pd; 
025} 

E' bene ricordare che il testo riportato dalla funzione name è dipendente dalla piattaforma utilizzata.

Vota questo articolo per primo

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

In C++ è possibile leggere dal flusso di input una stringa terminata con uno spazio utilizzando il seguente frammento di codice:

001#include<iostream>
002#include<string>
003using namespace std;
004int main()
005{
006    cout << "Scrivi una parola:\n";
007    string s;
008    cin >> s;
009    cout << "<Hai scritto: " << s << '\n';
010}

Da notare che non è necessario effettuare in modo esplicito operazioni per la gestione della memoria.

Nel caso in cui sia necessario leggere un'intera linea piuttosto che una singola parola, allora si può fare come segue:

001#include<iostream>
002#include<string>
003
004
005using namespace std;
006int main()
007{
008    cout << "Scrivi una linea:\n";
009    string s;
010    getline(cin,s);
011    cout << "Hai scritto: " << s << '\n';
012}

Vota questo articolo per primo

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

In questi ultimi tempi si sono create nuove esigenze che impongono una maggiore integrazione delle funzioni aziendali. In particolare tra il livello di produzione e quello gestionale è presente un gap informativo, che può essere agevolmente colmato da un sistema MES; esso rappresenta lo strumento chiave per lo scambio delle informazioni tra il livello gestionale (tipicamente dominato dai sistemi ERP) ed il campo.

Prosegue...

Vota questo articolo per primo

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Quando si usano i riferimenti vi sono alcune regole che devono essere tenute in mente:

  1. Un riferimento deve essere inizializzato quando è creato (un puntatore può essere inizializzato in qualunque momento).
  2. Quando un riferimento è stato inizializzato non può più essere modificato in modo che riferisca un altro oggetto (i puntatori possono puntare ad un altro oggetto in qualsiasi momento)
  3. Un riferimento punta sempre ad una zona di memoria valida e non è possible inizializzarlo a NULL

Quando una funzione restituisce un riferimento è necessario fare attenzione che la zona di memoria a cui fa riferimento sia valida anche all'esterno dello spazio di validità della funzione. In particolare un riferimento restituito all'esterno non deve mai riferire una variabile locale alla funzione.

Ad esempio:

//: C11:Reference.cpp
// Simple C++ references
int* f(int* x)
{
  (*x)++;
  return x; // Safe, x is outside this scope
}

int& g(int& x)
{
  x++; // Same effect as in f()
  return x; // Safe, outside this scope
}

int& h()
{
  int q;
  //!  return q; // Error
  static int x;
  return x; // Safe, x lives outside this scope
}

int main()
{
  int a = 0;
  f(&a); // Ugly (but explicit)
  g(a);   // Clean (but hidden)
} ///:~

const reference

Dichiare il parametro di una funzione come un riferimento costante impone alcune restrizioni sul suo utilizzo da parte della funzione. Più precisamente, per i tipi predefiniti dal linguaggio impone che la funzione non possa modificare il valore dell'argomento, mentre per i tipi definiti dall'utente richiede che la funzione chiami soltanto funzioni membro const e che non modifichi alcun dato membro pubblico (in altre parole non ne può alterare lo stato).

L'utilizzo di riferimenti costanti come argomenti di funzioni è particolarmente importante, poiché la funzione potrebbe ricevere come parametro un oggetto temporaneo, sia come valore di ritorno di un'altra funzione che in modo esplicito dall'utilizzatore della funzione. Poiché gli oggetti temporanei sono implementati come oggetti costanti, se non si definisce l'argomento della funzione come riferimento const, gli oggetti temporanei non saranno mai accettati come parametri dalla funzione.

 

Vota questo articolo per primo

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

 

Big-endian e little-endian sono due metodi differenti usati dai calcolatori per immagazzinare in memoria dati di dimensione superiore al byte (es. word, dword, qword).

Ad esempio, Intel e Digital usano il formato little endian mentre Motorola, IBM e Sun usano il formato big endian.
Il big-endian, dato che è stato scelto come ordine standard in molti protocolli utilizzati in Internet, viene anche chiamato network byte order. Per contro viene chiamato host byte order l'ordine nativo dell'host in uso.

Prosegue...

Vota questo articolo per primo

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Calendario

<<  settembre 2010  >>
lumamegivesado
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

View posts in large calendar
Licenza d'uso
Eccetto dove diversamente specificato, i contenuti di questo sito sono rilasciati mediante:

Licenza Creative Common