La dichiarazione anticipata è un meccanismo per ridurre il numero di file inclusi nei file di intestazione. Ma qual'è la sintassi corretta per dichiarare anticipatamente una classe che si trova all'interno di un dato namespace?

Utilizzando la seguente dichiarazione:

001class A::B::ClassName;

il compilatore genera un errore del tipo:

namespace "A::B" has no tag member named "CClassName"

Esistono due modi per risolvere il problema. Il primo consiste nel definire il name space utilizzando le parole chiave using namespace e successivamente dichiarare la classe.

001using namespace A::B;
002class ClassName;

Il secondo metodo, invece, consiste nel deifinire la dichiarazione anticipata come segue:

001namespace A {
002    namespace B {
003        class ClassName;
004}};

La seconda alternativa è preferibile poiché l'utilizzo delle parole chiave using namespace all'interno di un file di inclusione può avere effetti collaterali anche negli altri file di intestazione che lo includono.

Vota questo articolo per primo

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

Le chiamate di funzione

La libreria fornita da Microsoft fornisce allo sviluppatore un ricco insieme di API: il nucleo centrale è basato sulla libreria di Berkeley, mentre un ulteriore insieme estende le funzionalità esportate con alcune caratteristiche specifiche per Windows.

Prosegue...

Vota questo articolo per primo

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

Concetti Preliminari

L’interfaccia di programmazione chiamata Windows Socket (Winsock) utilizza il paradigma delle socket introdotto dalla libreria BDS del mondo UNIX, anche se con qualche piccolo adattamento per il sistema operativo della Microsoft.

Prosegue...

Vota questo articolo per primo

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

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

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