<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.linux360.ro/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Radubolovan</id>
		<title>linux360 - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linux360.ro/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Radubolovan"/>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php/Special:Contributions/Radubolovan"/>
		<updated>2026-04-19T13:28:15Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Sistem_de_depanare_a_aplicatiilor_in_limbajul_C-plus-plus&amp;diff=1637</id>
		<title>Sistem de depanare a aplicatiilor in limbajul C-plus-plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Sistem_de_depanare_a_aplicatiilor_in_limbajul_C-plus-plus&amp;diff=1637"/>
				<updated>2005-12-23T00:57:01Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: /* Mesaje intr-o consola */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Acest tutorial de programare este realizat cu ajutorul Bibliotecii [http://www.trolltech.com/products/qt/index.html Qt versiunea 3.x], dar se poate adapta uşor folosind orice altă bibliotecă.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Când dezvoltăm aplicaţii de proporţii (sau poate mai simple), pot aparea momente în care aplicaţia noastră să nu mai facă ce ne aşteptam noi sa faca şi incepem să ne punem (firesc) întrebarea &amp;quot;Acum ce s-a mai întâmplat?&amp;quot;.&lt;br /&gt;
Pentru a ne ajuta în această privinţă, ne putem construi o mulţime de unelte. Voi enumera o parte dintre ele:&lt;br /&gt;
* depanare prin executia programului folosind ''breakpoints'' si/sau linie cu linie;&lt;br /&gt;
* scrierea unor mesaje într-un fişier de log;&lt;br /&gt;
* scrierea unor mesaje într-o consola;&lt;br /&gt;
* aruncarea şi prinderea excepţiilor;&lt;br /&gt;
Folosirea unor ''breakpoints'' nu face cazul acestui tutorial.&lt;br /&gt;
Aruncarea şi prinderea excepţiilor este o tehnologie mult prea complex pentru a fi detaliat aici; există  suficient material pe internet pentru aceasta.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mesaje intr-o consola==&lt;br /&gt;
Sa presupunem ca la un moment dat avem nevoie sa obtinem valorile unor variabile care nu se pot afla prin ''breakpoints''; de exemplu într-o funcţie de reîmprospatare a unei ferestre, care se apelează într-un ciclu infinit. Aceste valori le putem afla prin două modalitaţi: scrierea lor intr-un fişier de log sau afişarea lor intr-o consolă. Fiecare dintre cele două are avantaje şi dezavantaje.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''consolă - avantaje (faţă de log)''':&lt;br /&gt;
* mesajele se pot urmări În timpul rulării programului&lt;br /&gt;
* nu necesită spaţiu suplimentar pe Hard Disk Drive (HDD)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''consolă - dezavantaje (faţă de log)''':&lt;br /&gt;
* consumă resurse suplimentare&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Crearea consolei'''&lt;br /&gt;
- '''kdsconsole.h'''&lt;br /&gt;
 /***************************************************************************&lt;br /&gt;
 *   Copyright (C) 2005 Radu Bolovan                                       *&lt;br /&gt;
 *   radubolovan@dainet.ro                                                 *&lt;br /&gt;
 *                                                                         *&lt;br /&gt;
 *   This is free software; you can redistribute it and/or modify it       *&lt;br /&gt;
 *   under the terms of the GNU General Public License as published by     *&lt;br /&gt;
 *   the Free Software Foundation; either version 2 of the License, or     *&lt;br /&gt;
 *   (at your option) any later version.                                   *&lt;br /&gt;
 *                                                                         *&lt;br /&gt;
 *   This program is distributed in the hope that it will be useful,       *&lt;br /&gt;
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *&lt;br /&gt;
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *&lt;br /&gt;
 *   GNU General Public License for more details.                          *&lt;br /&gt;
 *                                                                         *&lt;br /&gt;
 *   You should have received a copy of the GNU General Public License     *&lt;br /&gt;
 *   along with this program; if not, write to the                         *&lt;br /&gt;
 *   Free Software Foundation, Inc.,                                       *&lt;br /&gt;
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *&lt;br /&gt;
 ***************************************************************************/&lt;br /&gt;
 #ifndef KDSCONSOLE_H&lt;br /&gt;
 #define KDSCONSOLE_H&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;qtextedit.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 class QTimer;&lt;br /&gt;
 &lt;br /&gt;
 class KDSConsole : public QTextEdit&lt;br /&gt;
 {&lt;br /&gt;
     Q_OBJECT&lt;br /&gt;
 public:&lt;br /&gt;
     /* constructor */&lt;br /&gt;
     KDSConsole( QWidget *parent = 0, const char *strLogFileName = 0 );&lt;br /&gt;
 &lt;br /&gt;
     /* destructor */&lt;br /&gt;
     ~KDSConsole();&lt;br /&gt;
 &lt;br /&gt;
     /* activare salvare automata intr-un fisier */&lt;br /&gt;
     void enableAutoSave( bool bEnable, int nTime = 2000 );&lt;br /&gt;
 &lt;br /&gt;
     /* seteaza fisierul in care sa salveze */&lt;br /&gt;
     void setLogFileName( QString strLogFileName );&lt;br /&gt;
 &lt;br /&gt;
 public slots:&lt;br /&gt;
     /* salveaza in fisier */&lt;br /&gt;
     void saveToLogFile();&lt;br /&gt;
 &lt;br /&gt;
 protected:&lt;br /&gt;
     /* se apeleaza DOAR cand se apasa butonul drept al mouse-ului&lt;br /&gt;
      * ----- vezi kdsconsole.cpp -----&lt;br /&gt;
     */&lt;br /&gt;
     void contentsMousePressEvent( QMouseEvent *event );&lt;br /&gt;
 &lt;br /&gt;
 protected:&lt;br /&gt;
     /* numele fisierului in care se salveaza */&lt;br /&gt;
     char *m_strLogFileName;&lt;br /&gt;
 &lt;br /&gt;
     /* timer-ul */&lt;br /&gt;
     QTimer *m_pTimer;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 extern KDSConsole *g_pConsole;&lt;br /&gt;
 &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
- '''kdsconsole.cpp'''&lt;br /&gt;
 #include &amp;quot;kdsconsole.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;qtimer.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;qaction.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;qevent.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;qpopupmenu.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 KDSConsole *g_pConsole = NULL;&lt;br /&gt;
 &lt;br /&gt;
 KDSConsole::KDSConsole( QWidget *parent, const char *strLogFileName )&lt;br /&gt;
 : QTextEdit( parent )&lt;br /&gt;
 {&lt;br /&gt;
     /* nu trebuie sa se editeze */&lt;br /&gt;
     setReadOnly( true );&lt;br /&gt;
 &lt;br /&gt;
     /* aliniez textul la stanga */&lt;br /&gt;
     setAlignment ( Qt::AlignLeft );&lt;br /&gt;
 &lt;br /&gt;
     /* daca consola se creaza de sine statatoare&lt;br /&gt;
      * (intr-o alta fereastra decat a aplicatiei, sau a unei clase a aplicatiei)&lt;br /&gt;
      * setez dimensiunile ferestrei&lt;br /&gt;
     */&lt;br /&gt;
     if( !parent )&lt;br /&gt;
         setMinimumSize( 640, 150 );&lt;br /&gt;
 &lt;br /&gt;
     /* setez numele fisierul in care se va scrie&lt;br /&gt;
      * strLogFileName este numele fisierului&lt;br /&gt;
     */&lt;br /&gt;
     if( strLogFileName )&lt;br /&gt;
     {&lt;br /&gt;
         m_strLogFileName = new char [ strlen( strLogFileName ) + 1 ];&lt;br /&gt;
         strcpy( m_strLogFileName, strLogFileName );&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
         m_strLogFileName = NULL;&lt;br /&gt;
 &lt;br /&gt;
     /* setez un ceas pentru optiunea de auto salvare */&lt;br /&gt;
     m_pTimer = new QTimer( this );&lt;br /&gt;
     connect( m_pTimer, SIGNAL( timeout() ), this, SLOT( saveToLogFile() ) );&lt;br /&gt;
 &lt;br /&gt;
     setMouseTracking( true );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 KDSConsole::~KDSConsole()&lt;br /&gt;
 {&lt;br /&gt;
     /* daca exista un fisier atasat, ii sterg numele din memorie */&lt;br /&gt;
     if( m_strLogFileName )&lt;br /&gt;
     {&lt;br /&gt;
         delete []m_strLogFileName;&lt;br /&gt;
         m_strLogFileName = NULL;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void KDSConsole::enableAutoSave( bool bEnable, int nTime )&lt;br /&gt;
 {&lt;br /&gt;
     if( bEnable )&lt;br /&gt;
         m_pTimer-&amp;gt;start( nTime );&lt;br /&gt;
     else&lt;br /&gt;
         m_pTimer-&amp;gt;stop();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void KDSConsole::setLogFileName( QString strLogFileName )&lt;br /&gt;
 {&lt;br /&gt;
     unsigned int nLength = strLogFileName.length() + 1;&lt;br /&gt;
 &lt;br /&gt;
     /* daca exista deja un fisier atasat si daca numele lui este mai mic decat cel curent,&lt;br /&gt;
      * el (numele) trebuie realocat dinamic&lt;br /&gt;
     */&lt;br /&gt;
     if( m_strLogFileName )&lt;br /&gt;
     {&lt;br /&gt;
         if( strlen( m_strLogFileName ) &amp;lt; nLength )&lt;br /&gt;
         {&lt;br /&gt;
             delete []m_strLogFileName;&lt;br /&gt;
             m_strLogFileName = new char[ nLength ];&lt;br /&gt;
             }&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
         m_strLogFileName = new char[ nLength ];&lt;br /&gt;
 &lt;br /&gt;
     unsigned int nIndex;&lt;br /&gt;
 &lt;br /&gt;
     /* copiez numele fisierului curent &amp;quot;in&amp;quot; cel al clasei */&lt;br /&gt;
     for( nIndex = 0; nIndex &amp;lt; nLength - 1; nIndex++ )&lt;br /&gt;
         m_strLogFileName[ nIndex ] = strLogFileName.at( nIndex ).latin1();&lt;br /&gt;
     m_strLogFileName[ nIndex ] = '\0';&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void KDSConsole::saveToLogFile()&lt;br /&gt;
 {&lt;br /&gt;
     /* daca nu exista un fisier atasat&lt;br /&gt;
      * atunci afisez un mesaj de eroare in consola&lt;br /&gt;
      * si ies din functie&lt;br /&gt;
      */&lt;br /&gt;
     if( !m_strLogFileName )&lt;br /&gt;
     {&lt;br /&gt;
         append( &amp;quot;I cannot find an attached file&amp;quot; );&lt;br /&gt;
         return;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     FILE *file = fopen( m_strLogFileName, &amp;quot;w&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
     /* daca nu se poate crea fisierul cu numele dat,&lt;br /&gt;
      * afisez un mesaj in consola si ies din functie&lt;br /&gt;
     */&lt;br /&gt;
     if( !file )&lt;br /&gt;
     {&lt;br /&gt;
         QString strTmp = &amp;quot;I cannot create file &amp;quot; + (QString)m_strLogFileName;&lt;br /&gt;
         append( strTmp );&lt;br /&gt;
         return;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     /* obtin textul din consola si il convertesc QString la char* */&lt;br /&gt;
     QString strTmp = text();&lt;br /&gt;
     int nLength = strTmp.length() + 1;&lt;br /&gt;
     char *strText = new char[ nLength ];&lt;br /&gt;
     int nIndex;&lt;br /&gt;
     for( nIndex = 0; nIndex &amp;lt; nLength - 1; nIndex++ )&lt;br /&gt;
         strText[ nIndex ] = strTmp.at( nIndex ).latin1();&lt;br /&gt;
     strText[ nIndex ] = '\0';&lt;br /&gt;
 &lt;br /&gt;
     /* scriu in fisier textul din consola */&lt;br /&gt;
     fprintf( file, &amp;quot;%s&amp;quot;, strText );&lt;br /&gt;
 &lt;br /&gt;
     /* daca nu se poate inchide fisierul, se afiseaza un mesaj in consola */&lt;br /&gt;
     if( fclose( file ) == 0 )&lt;br /&gt;
          append( &amp;quot;Saved to log&amp;quot; );&lt;br /&gt;
     else&lt;br /&gt;
          append( &amp;quot;I couldn't close the file&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
     delete []strText;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void KDSConsole::contentsMousePressEvent( QMouseEvent *event )&lt;br /&gt;
 {&lt;br /&gt;
     /* in cazul in care se apasa butonul drept al mouse-ului&lt;br /&gt;
      * se creaza un meniu&lt;br /&gt;
     */&lt;br /&gt;
     if( event-&amp;gt;button() == Qt::RightButton )&lt;br /&gt;
     {&lt;br /&gt;
         QPopupMenu *menu = new QPopupMenu( this );&lt;br /&gt;
         menu-&amp;gt;insertItem( tr( &amp;quot;Save to log file&amp;quot; ), this, SLOT( saveToLogFile() ) );&lt;br /&gt;
         menu-&amp;gt;setMouseTracking( true );&lt;br /&gt;
         menu-&amp;gt;exec( mapToGlobal( event-&amp;gt;pos() ) );&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Dupa cum se vede am declarat şi definit o variabilă globală de tipul '''KDSConsole''', externă - pentru a o putea apela din orice fişier. Pentru folosirea unui astfel de obiect ('''KDSConsole''') voi mai adăuga incă două metode, faţă de cel obişnuit:&lt;br /&gt;
 g_pConsole = new KDSConsole();&lt;br /&gt;
 g_pConsole-&amp;gt;setCaption( &amp;quot;KDSConsole&amp;quot; );&lt;br /&gt;
 g_pConsole-&amp;gt;show();&lt;br /&gt;
 &lt;br /&gt;
 //ceva cod&lt;br /&gt;
 &lt;br /&gt;
 g_pConsole-&amp;gt;append( &amp;quot;Test in consola&amp;quot; ); //functia append() apartine clasei QTextEdit&lt;br /&gt;
 &lt;br /&gt;
 //alt cod&lt;br /&gt;
 &lt;br /&gt;
 g_pConsole-&amp;gt;hide();&lt;br /&gt;
 delete g_pConsole;&lt;br /&gt;
 g_pConsole = NULL;&lt;br /&gt;
&lt;br /&gt;
1) Funcţii statice ale unei clase:&lt;br /&gt;
&lt;br /&gt;
- '''kdsutils.h'''&lt;br /&gt;
 #ifndef KDSUTILS_H&lt;br /&gt;
 #define KDSUTILS_H&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;kdsconsole.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;qstring.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 class KDSUtils&lt;br /&gt;
 {&lt;br /&gt;
     public:&lt;br /&gt;
     KDSUtils(){;}&lt;br /&gt;
     ~KDSUtils(){;}&lt;br /&gt;
 &lt;br /&gt;
     static void initConsole(){ g_pConsole = new KDSConsole(); g_pConsole-&amp;gt;setCaption( &amp;quot;KDSConsole&amp;quot; ); g_pConsole-&amp;gt;Show(); }&lt;br /&gt;
     static void appendToConsole( QString str ){ if( g_pConsole ) g_pConsole-&amp;gt;append( str ); }&lt;br /&gt;
     static void setConsoleFileName( QString str ){ if( g_pConsole ) g_pConsole-&amp;gt;setLogFileName( str ); }&lt;br /&gt;
     static void setConsoleAutoSave( bool bEnable, int nTime ){ if( g_pConsole ) g_pConsole-&amp;gt;enableAutoSave( bEnable, nTime ); }&lt;br /&gt;
     static void saveConsoleToFile() { if( g_pConsole ) g_pConsole-&amp;gt;saveToLogFile(); }&lt;br /&gt;
     static void destroyConsole(){ if( g_pConsole ){ g_pConsole-&amp;gt;hide(); delete g_pConsole; g_pConsole = NULL; } }&lt;br /&gt;
 };&lt;br /&gt;
  &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Acestea se pot apela (după cum se cunoaşte) prin:&lt;br /&gt;
 KDSUtils::initConsole(); //numai la initializarea aplicatiei&lt;br /&gt;
 KDSUtils::setConsoleFileName( &amp;quot;/home/Radu/kdsconsole.txt&amp;quot; );&lt;br /&gt;
 KDSUtils::setConsoleAutoSave( true, 60000 ); // salveaza o data pe minut - 1000 milisecunde = o secunda&lt;br /&gt;
 &lt;br /&gt;
 //ceva cod&lt;br /&gt;
 &lt;br /&gt;
 KDSUtils::ippendToConsole( &amp;quot;Un text in consola&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
 //alt cod&lt;br /&gt;
 &lt;br /&gt;
 KDSUtils::destroyConsole(); //cand nu mai avem nevoie de consola&lt;br /&gt;
&lt;br /&gt;
2) Macro-uri:&lt;br /&gt;
&lt;br /&gt;
- '''kdsdefs.h'''&lt;br /&gt;
 #ifndef KDSUTILS_H&lt;br /&gt;
 #define KDSUTILS_H&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;kdsconsole.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define INIT_CONSOLE() KDSUtils::initConsole()&lt;br /&gt;
 #define SET_CONSOLE_FILE_NAME( fileName ) KDSUtils::setConsoleFileName( fileName )&lt;br /&gt;
 #define SET_CONSOLE_AUTOSAVE( enable, time ) KDSUtils::setConsoleAutoSave( enable, time )&lt;br /&gt;
 #define SAVE_CONSOLE_TO_FILE() KDSUtils::saveConsoleToFile()&lt;br /&gt;
 #define KDS_TRACE( string ) KDSUtils::appendToConsole( string )&lt;br /&gt;
 #define DESTROY_CONSOLE() KDSUtils::destroyConsole()&lt;br /&gt;
 &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Observatii:&lt;br /&gt;
&lt;br /&gt;
1) Nu folosiţi mai mult de una dintre cele trei metode!!!&lt;br /&gt;
&lt;br /&gt;
2) Acelaşi efect se poate obţine punând&lt;br /&gt;
 printf( &amp;quot;Un text catre consola&amp;quot; );&lt;br /&gt;
oriunde in cod si rularea programului din consolă (KConsole)&lt;br /&gt;
&lt;br /&gt;
3) Funcţia de adăugare a unui text în consolă se mai poate implementa astfel încat sa primească un numar nelimitat de parametrii şi să funcţioneze analog funcţiei '''sprintf()'''.&lt;br /&gt;
&lt;br /&gt;
--[[User:Radubolovan|Radu Bolovan]] 01:32, 21 December 2005 (EET)&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorial]]&lt;br /&gt;
[[Category:Programming]]&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Sistem_de_depanare_a_aplicatiilor_in_limbajul_C-plus-plus&amp;diff=1636</id>
		<title>Sistem de depanare a aplicatiilor in limbajul C-plus-plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Sistem_de_depanare_a_aplicatiilor_in_limbajul_C-plus-plus&amp;diff=1636"/>
				<updated>2005-12-23T00:46:58Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: /* Mesaje intr-o consola */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Acest tutorial de programare este realizat cu ajutorul Bibliotecii [http://www.trolltech.com/products/qt/index.html Qt versiunea 3.x], dar se poate adapta uşor folosind orice altă bibliotecă.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Când dezvoltăm aplicaţii de proporţii (sau poate mai simple), pot aparea momente în care aplicaţia noastră să nu mai facă ce ne aşteptam noi sa faca şi incepem să ne punem (firesc) întrebarea &amp;quot;Acum ce s-a mai întâmplat?&amp;quot;.&lt;br /&gt;
Pentru a ne ajuta în această privinţă, ne putem construi o mulţime de unelte. Voi enumera o parte dintre ele:&lt;br /&gt;
* depanare prin executia programului folosind ''breakpoints'' si/sau linie cu linie;&lt;br /&gt;
* scrierea unor mesaje într-un fişier de log;&lt;br /&gt;
* scrierea unor mesaje într-o consola;&lt;br /&gt;
* aruncarea şi prinderea excepţiilor;&lt;br /&gt;
Folosirea unor ''breakpoints'' nu face cazul acestui tutorial.&lt;br /&gt;
Aruncarea şi prinderea excepţiilor este o tehnologie mult prea complex pentru a fi detaliat aici; există  suficient material pe internet pentru aceasta.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mesaje intr-o consola==&lt;br /&gt;
Sa presupunem ca la un moment dat avem nevoie sa obtinem valorile unor variabile care nu se pot afla prin ''breakpoints''; de exemplu într-o funcţie de reîmprospatare a unei ferestre, care se apelează într-un ciclu infinit. Aceste valori le putem afla prin două modalitaţi: scrierea lor intr-un fişier de log sau afişarea lor intr-o consolă. Fiecare dintre cele două are avantaje şi dezavantaje.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''consolă - avantaje (faţă de log)''':&lt;br /&gt;
* mesajele se pot urmări În timpul rulării programului&lt;br /&gt;
* nu necesită spaţiu suplimentar pe Hard Disk Drive (HDD)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''consolă - dezavantaje (faţă de log)''':&lt;br /&gt;
* consumă resurse suplimentare&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Crearea consolei'''&lt;br /&gt;
- '''kdsconsole.h'''&lt;br /&gt;
 /***************************************************************************&lt;br /&gt;
 *   Copyright (C) 2005 Radu Bolovan                                       *&lt;br /&gt;
 *   radubolovan@dainet.ro                                                 *&lt;br /&gt;
 *                                                                         *&lt;br /&gt;
 *   This is free software; you can redistribute it and/or modify it       *&lt;br /&gt;
 *   under the terms of the GNU General Public License as published by     *&lt;br /&gt;
 *   the Free Software Foundation; either version 2 of the License, or     *&lt;br /&gt;
 *   (at your option) any later version.                                   *&lt;br /&gt;
 *                                                                         *&lt;br /&gt;
 *   This program is distributed in the hope that it will be useful,       *&lt;br /&gt;
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *&lt;br /&gt;
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *&lt;br /&gt;
 *   GNU General Public License for more details.                          *&lt;br /&gt;
 *                                                                         *&lt;br /&gt;
 *   You should have received a copy of the GNU General Public License     *&lt;br /&gt;
 *   along with this program; if not, write to the                         *&lt;br /&gt;
 *   Free Software Foundation, Inc.,                                       *&lt;br /&gt;
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *&lt;br /&gt;
 ***************************************************************************/&lt;br /&gt;
 #ifndef KDSCONSOLE_H&lt;br /&gt;
 #define KDSCONSOLE_H&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;qtextedit.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 class QTimer;&lt;br /&gt;
 &lt;br /&gt;
 class KDSConsole : public QTextEdit&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
     /* constructor */&lt;br /&gt;
     KDSConsole( QWidget *parent = 0, const char *strLogFileName = 0 );&lt;br /&gt;
 &lt;br /&gt;
     /* destructor */&lt;br /&gt;
     ~KDSConsole();&lt;br /&gt;
 &lt;br /&gt;
     /* activare salvare automata intr-un fisier */&lt;br /&gt;
     void enableAutoSave( bool bEnable, int nTime = 2000 );&lt;br /&gt;
 &lt;br /&gt;
     /* seteaza fisierul in care sa salveze */&lt;br /&gt;
     void setLogFileName( QString strLogFileName );&lt;br /&gt;
 &lt;br /&gt;
 public slots:&lt;br /&gt;
     /* salveaza in fisier */&lt;br /&gt;
     void saveToLogFile();&lt;br /&gt;
 &lt;br /&gt;
 protected:&lt;br /&gt;
     /* se apeleaza DOAR cand se apasa butonul drept al mouse-ului&lt;br /&gt;
      * ----- vezi kdsconsole.cpp -----&lt;br /&gt;
     */&lt;br /&gt;
     void contentsMousePressEvent( QMouseEvent *event );&lt;br /&gt;
 &lt;br /&gt;
 protected:&lt;br /&gt;
     /* numele fisierului in care se salveaza */&lt;br /&gt;
     char *m_strLogFileName;&lt;br /&gt;
 &lt;br /&gt;
     /* timer-ul */&lt;br /&gt;
     QTimer *m_pTimer;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 extern KDSConsole *g_pConsole;&lt;br /&gt;
 &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
- '''kdsconsole.cpp'''&lt;br /&gt;
 #include &amp;quot;kdsconsole.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;qtimer.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;qaction.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;qevent.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;qpopupmenu.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 KDSConsole *g_pConsole = NULL;&lt;br /&gt;
 &lt;br /&gt;
 KDSConsole::KDSConsole( QWidget *parent, const char *strLogFileName )&lt;br /&gt;
 : QTextEdit( parent )&lt;br /&gt;
 {&lt;br /&gt;
     /* nu trebuie sa se editeze */&lt;br /&gt;
     setReadOnly( true );&lt;br /&gt;
 &lt;br /&gt;
     /* aliniez textul la stanga */&lt;br /&gt;
     setAlignment ( Qt::AlignLeft );&lt;br /&gt;
 &lt;br /&gt;
     /* daca consola se creaza de sine statatoare&lt;br /&gt;
      * (intr-o alta fereastra decat a aplicatiei, sau a unei clase a aplicatiei)&lt;br /&gt;
      * setez dimensiunile ferestrei&lt;br /&gt;
     */&lt;br /&gt;
     if( !parent )&lt;br /&gt;
         setMinimumSize( 640, 150 );&lt;br /&gt;
 &lt;br /&gt;
     /* setez numele fisierul in care se va scrie&lt;br /&gt;
      * strLogFileName este numele fisierului&lt;br /&gt;
     */&lt;br /&gt;
     if( strLogFileName )&lt;br /&gt;
     {&lt;br /&gt;
         m_strLogFileName = new char [ strlen( strLogFileName ) + 1 ];&lt;br /&gt;
         strcpy( m_strLogFileName, strLogFileName );&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
         m_strLogFileName = NULL;&lt;br /&gt;
 &lt;br /&gt;
     /* setez un ceas pentru optiunea de auto salvare */&lt;br /&gt;
     m_pTimer = new QTimer( this );&lt;br /&gt;
     connect( m_pTimer, SIGNAL( timeout() ), this, SLOT( saveToLogFile() ) );&lt;br /&gt;
 &lt;br /&gt;
     setMouseTracking( true );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 KDSConsole::~KDSConsole()&lt;br /&gt;
 {&lt;br /&gt;
     /* daca exista un fisier atasat, ii sterg numele din memorie */&lt;br /&gt;
     if( m_strLogFileName )&lt;br /&gt;
     {&lt;br /&gt;
         delete []m_strLogFileName;&lt;br /&gt;
         m_strLogFileName = NULL;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void KDSConsole::enableAutoSave( bool bEnable, int nTime )&lt;br /&gt;
 {&lt;br /&gt;
     if( bEnable )&lt;br /&gt;
         m_pTimer-&amp;gt;start( nTime );&lt;br /&gt;
     else&lt;br /&gt;
         m_pTimer-&amp;gt;stop();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void KDSConsole::setLogFileName( QString strLogFileName )&lt;br /&gt;
 {&lt;br /&gt;
     unsigned int nLength = strLogFileName.length() + 1;&lt;br /&gt;
 &lt;br /&gt;
     /* daca exista deja un fisier atasat si daca numele lui este mai mic decat cel curent,&lt;br /&gt;
      * el (numele) trebuie realocat dinamic&lt;br /&gt;
     */&lt;br /&gt;
     if( m_strLogFileName )&lt;br /&gt;
     {&lt;br /&gt;
         if( strlen( m_strLogFileName ) &amp;lt; nLength )&lt;br /&gt;
         {&lt;br /&gt;
             delete []m_strLogFileName;&lt;br /&gt;
             m_strLogFileName = new char[ nLength ];&lt;br /&gt;
             }&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
         m_strLogFileName = new char[ nLength ];&lt;br /&gt;
 &lt;br /&gt;
     unsigned int nIndex;&lt;br /&gt;
 &lt;br /&gt;
     /* copiez numele fisierului curent &amp;quot;in&amp;quot; cel al clasei */&lt;br /&gt;
     for( nIndex = 0; nIndex &amp;lt; nLength - 1; nIndex++ )&lt;br /&gt;
         m_strLogFileName[ nIndex ] = strLogFileName.at( nIndex ).latin1();&lt;br /&gt;
     m_strLogFileName[ nIndex ] = '\0';&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void KDSConsole::saveToLogFile()&lt;br /&gt;
 {&lt;br /&gt;
     /* daca nu exista un fisier atasat&lt;br /&gt;
      * atunci afisez un mesaj de eroare in consola&lt;br /&gt;
      * si ies din functie&lt;br /&gt;
      */&lt;br /&gt;
     if( !m_strLogFileName )&lt;br /&gt;
     {&lt;br /&gt;
         append( &amp;quot;I cannot find an attached file&amp;quot; );&lt;br /&gt;
         return;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     FILE *file = fopen( m_strLogFileName, &amp;quot;w&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
     /* daca nu se poate crea fisierul cu numele dat,&lt;br /&gt;
      * afisez un mesaj in consola si ies din functie&lt;br /&gt;
     */&lt;br /&gt;
     if( !file )&lt;br /&gt;
     {&lt;br /&gt;
         QString strTmp = &amp;quot;I cannot create file &amp;quot; + (QString)m_strLogFileName;&lt;br /&gt;
         append( strTmp );&lt;br /&gt;
         return;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     /* obtin textul din consola si il convertesc QString la char* */&lt;br /&gt;
     QString strTmp = text();&lt;br /&gt;
     int nLength = strTmp.length() + 1;&lt;br /&gt;
     char *strText = new char[ nLength ];&lt;br /&gt;
     int nIndex;&lt;br /&gt;
     for( nIndex = 0; nIndex &amp;lt; nLength - 1; nIndex++ )&lt;br /&gt;
         strText[ nIndex ] = strTmp.at( nIndex ).latin1();&lt;br /&gt;
     strText[ nIndex ] = '\0';&lt;br /&gt;
 &lt;br /&gt;
     /* scriu in fisier textul din consola */&lt;br /&gt;
     fprintf( file, &amp;quot;%s&amp;quot;, strText );&lt;br /&gt;
 &lt;br /&gt;
     /* daca nu se poate inchide fisierul, se afiseaza un mesaj in consola */&lt;br /&gt;
     if( fclose( file ) == 0 )&lt;br /&gt;
          append( &amp;quot;Saved to log&amp;quot; );&lt;br /&gt;
     else&lt;br /&gt;
          append( &amp;quot;I couldn't close the file&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
     delete []strText;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void KDSConsole::contentsMousePressEvent( QMouseEvent *event )&lt;br /&gt;
 {&lt;br /&gt;
     /* in cazul in care se apasa butonul drept al mouse-ului&lt;br /&gt;
      * se creaza un meniu&lt;br /&gt;
     */&lt;br /&gt;
     if( event-&amp;gt;button() == Qt::RightButton )&lt;br /&gt;
     {&lt;br /&gt;
         QPopupMenu *menu = new QPopupMenu( this );&lt;br /&gt;
         menu-&amp;gt;insertItem( tr( &amp;quot;Save to log file&amp;quot; ), this, SLOT( saveToLogFile() ) );&lt;br /&gt;
         menu-&amp;gt;setMouseTracking( true );&lt;br /&gt;
         menu-&amp;gt;exec( mapToGlobal( event-&amp;gt;pos() ) );&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Dupa cum se vede am declarat şi definit o variabilă globală de tipul '''KDSConsole''', externă - pentru a o putea apela din orice fişier. Pentru folosirea unui astfel de obiect ('''KDSConsole''') voi mai adăuga incă două metode, faţă de cel obişnuit:&lt;br /&gt;
 g_pConsole = new KDSConsole();&lt;br /&gt;
 g_pConsole-&amp;gt;setCaption( &amp;quot;KDSConsole&amp;quot; );&lt;br /&gt;
 g_pConsole-&amp;gt;show();&lt;br /&gt;
 &lt;br /&gt;
 //ceva cod&lt;br /&gt;
 &lt;br /&gt;
 g_pConsole-&amp;gt;append( &amp;quot;Test in consola&amp;quot; ); //functia append() apartine clasei QTextEdit&lt;br /&gt;
 &lt;br /&gt;
 //alt cod&lt;br /&gt;
 &lt;br /&gt;
 g_pConsole-&amp;gt;hide();&lt;br /&gt;
 delete g_pConsole;&lt;br /&gt;
 g_pConsole = NULL;&lt;br /&gt;
&lt;br /&gt;
1) Funcţii statice ale unei clase:&lt;br /&gt;
&lt;br /&gt;
- '''kdsutils.h'''&lt;br /&gt;
 #ifndef KDSUTILS_H&lt;br /&gt;
 #define KDSUTILS_H&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;kdsconsole.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;qstring.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 class KDSUtils&lt;br /&gt;
 {&lt;br /&gt;
     public:&lt;br /&gt;
     KDSUtils(){;}&lt;br /&gt;
     ~KDSUtils(){;}&lt;br /&gt;
 &lt;br /&gt;
     static void initConsole(){ g_pConsole = new KDSConsole(); g_pConsole-&amp;gt;setCaption( &amp;quot;KDSConsole&amp;quot; ); g_pConsole-&amp;gt;Show(); }&lt;br /&gt;
     static void appendToConsole( QString str ){ if( g_pConsole ) g_pConsole-&amp;gt;append( str ); }&lt;br /&gt;
     static void setConsoleFileName( QString str ){ if( g_pConsole ) g_pConsole-&amp;gt;setLogFileName( str ); }&lt;br /&gt;
     static void setConsoleAutoSave( bool bEnable, int nTime ){ if( g_pConsole ) g_pConsole-&amp;gt;enableAutoSave( bEnable, nTime ); }&lt;br /&gt;
     static void saveConsoleToFile() { if( g_pConsole ) g_pConsole-&amp;gt;saveToLogFile(); }&lt;br /&gt;
     static void destroyConsole(){ if( g_pConsole ){ g_pConsole-&amp;gt;hide(); delete g_pConsole; g_pConsole = NULL; } }&lt;br /&gt;
 };&lt;br /&gt;
  &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Acestea se pot apela (după cum se cunoaşte) prin:&lt;br /&gt;
 KDSUtils::initConsole(); //numai la initializarea aplicatiei&lt;br /&gt;
 KDSUtils::setConsoleFileName( &amp;quot;/home/Radu/kdsconsole.txt&amp;quot; );&lt;br /&gt;
 KDSUtils::setConsoleAutoSave( true, 60000 ); // salveaza o data pe minut - 1000 milisecunde = o secunda&lt;br /&gt;
 &lt;br /&gt;
 //ceva cod&lt;br /&gt;
 &lt;br /&gt;
 KDSUtils::ippendToConsole( &amp;quot;Un text in consola&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
 //alt cod&lt;br /&gt;
 &lt;br /&gt;
 KDSUtils::destroyConsole(); //cand nu mai avem nevoie de consola&lt;br /&gt;
&lt;br /&gt;
2) Macro-uri:&lt;br /&gt;
&lt;br /&gt;
- '''kdsdefs.h'''&lt;br /&gt;
 #ifndef KDSUTILS_H&lt;br /&gt;
 #define KDSUTILS_H&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;kdsconsole.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define INIT_CONSOLE() KDSUtils::initConsole()&lt;br /&gt;
 #define SET_CONSOLE_FILE_NAME( fileName ) KDSUtils::setConsoleFileName( fileName )&lt;br /&gt;
 #define SET_CONSOLE_AUTOSAVE( enable, time ) KDSUtils::setConsoleAutoSave( enable, time )&lt;br /&gt;
 #define SAVE_CONSOLE_TO_FILE() KDSUtils::saveConsoleToFile()&lt;br /&gt;
 #define KDS_TRACE( string ) KDSUtils::appendToConsole( string )&lt;br /&gt;
 #define DESTROY_CONSOLE() KDSUtils::destroyConsole()&lt;br /&gt;
 &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Observatii:&lt;br /&gt;
&lt;br /&gt;
1) Nu folosiţi mai mult de una dintre cele trei metode!!!&lt;br /&gt;
&lt;br /&gt;
2) Acelaşi efect se poate obţine punând&lt;br /&gt;
 printf( &amp;quot;Un text catre consola&amp;quot; );&lt;br /&gt;
oriunde in cod si rularea programului din consolă (KConsole)&lt;br /&gt;
&lt;br /&gt;
3) Funcţia de adăugare a unui text în consolă se mai poate implementa astfel încat sa primească un numar nelimitat de parametrii şi să funcţioneze analog funcţiei '''sprintf()'''.&lt;br /&gt;
&lt;br /&gt;
--[[User:Radubolovan|Radu Bolovan]] 01:32, 21 December 2005 (EET)&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorial]]&lt;br /&gt;
[[Category:Programming]]&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Sistem_de_depanare_a_aplicatiilor_in_limbajul_C-plus-plus&amp;diff=1635</id>
		<title>Sistem de depanare a aplicatiilor in limbajul C-plus-plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Sistem_de_depanare_a_aplicatiilor_in_limbajul_C-plus-plus&amp;diff=1635"/>
				<updated>2005-12-21T17:33:05Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: /* Mesaje intr-o consola */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Acest tutorial de programare este realizat cu ajutorul Bibliotecii [http://www.trolltech.com/products/qt/index.html Qt versiunea 3.x], dar se poate adapta uşor folosind orice altă bibliotecă.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Când dezvoltăm aplicaţii de proporţii (sau poate mai simple), pot aparea momente în care aplicaţia noastră să nu mai facă ce ne aşteptam noi sa faca şi incepem să ne punem (firesc) întrebarea &amp;quot;Acum ce s-a mai întâmplat?&amp;quot;.&lt;br /&gt;
Pentru a ne ajuta în această privinţă, ne putem construi o mulţime de unelte. Voi enumera o parte dintre ele:&lt;br /&gt;
* depanare prin executia programului folosind ''breakpoints'' si/sau linie cu linie;&lt;br /&gt;
* scrierea unor mesaje într-un fişier de log;&lt;br /&gt;
* scrierea unor mesaje într-o consola;&lt;br /&gt;
* aruncarea şi prinderea excepţiilor;&lt;br /&gt;
Folosirea unor ''breakpoints'' nu face cazul acestui tutorial.&lt;br /&gt;
Aruncarea şi prinderea excepţiilor este o tehnologie mult prea complex pentru a fi detaliat aici; există  suficient material pe internet pentru aceasta.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mesaje intr-o consola==&lt;br /&gt;
Sa presupunem ca la un moment dat avem nevoie sa obtinem valorile unor variabile care nu se pot afla prin ''breakpoints''; de exemplu într-o funcţie de reîmprospatare a unei ferestre, care se apelează într-un ciclu infinit. Aceste valori le putem afla prin două modalitaţi: scrierea lor intr-un fişier de log sau afişarea lor intr-o consolă. Fiecare dintre cele două are avantaje şi dezavantaje.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''consolă - avantaje (faţă de log)''':&lt;br /&gt;
* mesajele se pot urmări În timpul rulării programului&lt;br /&gt;
* nu necesită spaţiu suplimentar pe Hard Disk Drive (HDD)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''consolă - dezavantaje (faţă de log)''':&lt;br /&gt;
* consumă resurse suplimentare&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Crearea consolei'''&lt;br /&gt;
- '''kdsconsole.h'''&lt;br /&gt;
 /***************************************************************************&lt;br /&gt;
 *   Copyright (C) 2005 Radu Bolovan                                       *&lt;br /&gt;
 *   radubolovan@dainet.ro                                                 *&lt;br /&gt;
 *                                                                         *&lt;br /&gt;
 *   This is free software; you can redistribute it and/or modify it       *&lt;br /&gt;
 *   under the terms of the GNU General Public License as published by     *&lt;br /&gt;
 *   the Free Software Foundation; either version 2 of the License, or     *&lt;br /&gt;
 *   (at your option) any later version.                                   *&lt;br /&gt;
 *                                                                         *&lt;br /&gt;
 *   This program is distributed in the hope that it will be useful,       *&lt;br /&gt;
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *&lt;br /&gt;
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *&lt;br /&gt;
 *   GNU General Public License for more details.                          *&lt;br /&gt;
 *                                                                         *&lt;br /&gt;
 *   You should have received a copy of the GNU General Public License     *&lt;br /&gt;
 *   along with this program; if not, write to the                         *&lt;br /&gt;
 *   Free Software Foundation, Inc.,                                       *&lt;br /&gt;
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *&lt;br /&gt;
 ***************************************************************************/&lt;br /&gt;
 #ifndef KDSCONSOLE_H&lt;br /&gt;
 #define KDSCONSOLE_H&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;qtextedit.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 class KDSConsole : public QTextEdit&lt;br /&gt;
 {&lt;br /&gt;
     public:&lt;br /&gt;
     KDSConsole( QWidget *parent = 0, const char *name = 0 );&lt;br /&gt;
     ~KDSConsole();&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 extern KDSConsole *g_pConsole;&lt;br /&gt;
 &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
- '''kdsconsole.cpp'''&lt;br /&gt;
 #include &amp;quot;kdsconsole.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 KDSConsole *g_pConsole = NULL;&lt;br /&gt;
 &lt;br /&gt;
 KDSConsole::KDSConsole( QWidget *parent, const char *name )&lt;br /&gt;
 : QTextEdit( parent, name )&lt;br /&gt;
 {&lt;br /&gt;
      setReadOnly( true );&lt;br /&gt;
      setAlignment ( Qt::AlignLeft );&lt;br /&gt;
      setMinimumSize( 640, 150 );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 KDSConsole::~KDSConsole()&lt;br /&gt;
 {}&lt;br /&gt;
&lt;br /&gt;
Dupa cum se vede am declarat şi definit o variabilă globală de tipul '''KDSConsole''', externă - pentru a o putea apela din orice fişier. Pentru folosirea unui astfel de obiect ('''KDSConsole''') voi mai adăuga incă două metode, faţă de cel obişnuit:&lt;br /&gt;
 g_pConsole = new KDSConsole();&lt;br /&gt;
 g_pConsole-&amp;gt;show();&lt;br /&gt;
 &lt;br /&gt;
 //ceva cod&lt;br /&gt;
 &lt;br /&gt;
 g_pConsole-&amp;gt;append( &amp;quot;Test in consola&amp;quot; ); //functia append() apartine clasei QTextEdit&lt;br /&gt;
 &lt;br /&gt;
 //alt cod&lt;br /&gt;
 &lt;br /&gt;
 g_pConsole-&amp;gt;hide();&lt;br /&gt;
 delete g_pConsole;&lt;br /&gt;
 g_pConsole = NULL;&lt;br /&gt;
&lt;br /&gt;
1) Trei funcţii statice ale unei clase:&lt;br /&gt;
&lt;br /&gt;
- '''kdsutils.h'''&lt;br /&gt;
 #ifndef KDSUTILS_H&lt;br /&gt;
 #define KDSUTILS_H&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;kdsconsole.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;qstring.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 class KDSUtils&lt;br /&gt;
 {&lt;br /&gt;
     public:&lt;br /&gt;
     KDSUtils(){;}&lt;br /&gt;
     ~KDSUtils(){;}&lt;br /&gt;
 &lt;br /&gt;
     static void InitConsole(){ g_pConsole = new KDSConsole(); g_pConsole-&amp;gt;Show() }&lt;br /&gt;
     static void AppendToConsole( QString str ){ if( g_pConsole ) g_pConsole-&amp;gt;append( str ); }&lt;br /&gt;
     static void DestroyConsole(){ if( g_pConsole ){ g_pConsole-&amp;gt;hide(); delete g_pConsole; g_pConsole = NULL; } }&lt;br /&gt;
 };&lt;br /&gt;
  &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Acestea se pot apela (după cum se cunoaşte) prin:&lt;br /&gt;
 KDSUtils::InitConsole(); //numai la initializarea aplicatiei&lt;br /&gt;
 &lt;br /&gt;
 //ceva cod&lt;br /&gt;
 &lt;br /&gt;
 KDSUtils::AppendToConsole( &amp;quot;Un text in consola&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
 //alt cod&lt;br /&gt;
 &lt;br /&gt;
 KDSUtils::DestroyConsole(); //cand nu mai avem nevoie de consola&lt;br /&gt;
&lt;br /&gt;
2) Trei macro-uri:&lt;br /&gt;
&lt;br /&gt;
- '''kdsdefs.h'''&lt;br /&gt;
 #ifndef KDSUTILS_H&lt;br /&gt;
 #define KDSUTILS_H&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;kdsconsole.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;qstring.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #define INIT_CONSOLE() KDSUtils::InitConsole()&lt;br /&gt;
 #define KDS_TRACE( string ) KDSUtils::AppendToConsole( string )&lt;br /&gt;
 #define DESTROY_CONSOLE() KDSUtils::DestroyConsole()&lt;br /&gt;
 &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Observatii:&lt;br /&gt;
&lt;br /&gt;
1) Nu folosiţi mai mult de una dintre cele trei metode!!!&lt;br /&gt;
&lt;br /&gt;
2) Acelaşi efect se poate obţine punând&lt;br /&gt;
 printf( &amp;quot;Un text catre consola&amp;quot; );&lt;br /&gt;
oriunde in cod si rularea programului din consolă (KConsole)&lt;br /&gt;
&lt;br /&gt;
3) Funcţia de adăugare a unui text în consolă se mai poate implementa astfel încat sa primească un numar nelimitat de parametrii şi să funcţioneze analog funcţiei '''sprintf()'''.&lt;br /&gt;
&lt;br /&gt;
--[[User:Radubolovan|Radu Bolovan]] 01:32, 21 December 2005 (EET)&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorial]]&lt;br /&gt;
[[Category:Programming]]&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Talk:Sistem_de_depanare_a_aplicatiilor_in_limbajul_C-plus-plus&amp;diff=1633</id>
		<title>Talk:Sistem de depanare a aplicatiilor in limbajul C-plus-plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Talk:Sistem_de_depanare_a_aplicatiilor_in_limbajul_C-plus-plus&amp;diff=1633"/>
				<updated>2005-12-20T23:52:40Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Notiţă personală: mai am de adăugat:&lt;br /&gt;
* KDSUtils::AppendToConsole( QString str, ... );&lt;br /&gt;
* KDSUtils::AppendToConsole( const char *szText, ... );&lt;br /&gt;
* pentru funcţiile de mai sus, optiunea de adăugare a unui timer&lt;br /&gt;
* scrierea de mesaje într-un log&lt;br /&gt;
--[[User:Radubolovan|Radu Bolovan]] 01:52, 21 December 2005 (EET)&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Main_Page&amp;diff=1632</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Main_Page&amp;diff=1632"/>
				<updated>2005-12-20T23:47:51Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* A început migrarea tutorialelor şi ghidurilor (HowTo) din forum în Wiki -- nu ezitaţi să daţi o mână de ajutor ;-) &lt;br /&gt;
* Vă rugăm, folosiţi '''doar''' [[linux360:Sandbox|caietul de ciorne]] pentru încercări şi probe.&lt;br /&gt;
* Deşi nu se văd oameni îmbrăcaţi în negru patrulând, acest Wiki nu este un ''sat fără câini'' -- avem deja [[Special:Log/block|un vandal pedepsit]] şi lista poate creşte.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ultimele 10 [[:Category:HowTo|ghiduri]] actualizate:&lt;br /&gt;
** [[Quagga on Linux|Quagga]] ([[:Category:Networking|reţea]]/[[:Category:Routing|rutare]])&lt;br /&gt;
** [[Cum dau net mai departe|Redistribuirea/Partajarea conexiunii la Internet]]  ([[:Category:Networking|retea]]/[[:Category:Routing|rutare]])&lt;br /&gt;
** [[Comunica prin lpt|Controlul motoarelor pas cu pas prin portul paralel]] ([[:Category:Programming|programare]])&lt;br /&gt;
** [[Autentificare ssh folosind chei publice/private|Autentificare la SSH cu chei publice]] ([[:Category:Networking|reţea]]/[[:Category:Tips'n'Tricks|ponturi]])&lt;br /&gt;
** [[Download si instalare E17 din CVS|Instalare automatizată E17 CVS]] ([[:Category:GEs|medii grafice]])&lt;br /&gt;
** [[Instalare Qemu|Instalarea emulatorului Qemu]] ([[:Category:VMs|maşini virtuale]])&lt;br /&gt;
** [[MRTG cu IPFM]] ([[:Category:WebStats|statistici grafice pe web]])&lt;br /&gt;
** [[Knoppix remastering|Reeditare Knoppix]] ([[:Category:Distributions|distribuţii]]/[[:Category:LiveCD|CD independent]]/[[:Category:Knoppix|Knoppix]])&lt;br /&gt;
** [[MU Online sub wine|MU Online rulat cu Wine]] ([[:Category:VMs|maşini virtuale]]/[[:Category:Games|jocuri]])&lt;br /&gt;
** [[Swap prin NFS|Memorie paginată peste NFS]] ([[:Category:Filesystems|sisteme de fişiere]]/[[:Category:Networking|reţea]]/[[:Category:Tips'n'tricks|ponturi]])&lt;br /&gt;
* Ultimele 10 [[:Category:Tutorial|tutoriale]] actualizate:&lt;br /&gt;
** [[Iptables romana|Introducere în &amp;lt;tt&amp;gt;iptables&amp;lt;/tt&amp;gt;]] ([[:Category:Networking|reţea]]/[[:Category:Firewall|filtrare trafic]])&lt;br /&gt;
** [[Supra%C3%AEnc%C4%83rcarea operatorilor %C3%AEn limbajul C-plus-plus|Supraîncărcarea operatorilor în ANSI C++]] ([[:Category:Programming|programare]])&lt;br /&gt;
** [[Sistem_de_depanare_a_aplicatiilor_in_limbajul_C-plus-plus|Sistem de depanare a aplicaţiilor în limbajul C-plus-plus]] ([[:Category:Programming|programare]])&lt;br /&gt;
* Ultimele 10 [[:Category:Collection|colecţii]] actualizate:&lt;br /&gt;
** [[Scripturi BASH|Scripturi Bash utile]] ([[:Category:Programming|programare]])&lt;br /&gt;
* Ultimele 10 [[:Category:Presentation|prezentări]] actualizate:&lt;br /&gt;
** [[KDSFlash]] ([[:Category:Graphics|grafică]]/[[:Category:Animation|animaţie]]/[[:Category:Programming|programare]])&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Sistem_de_depanare_a_aplicatiilor_in_limbajul_C-plus-plus&amp;diff=1631</id>
		<title>Sistem de depanare a aplicatiilor in limbajul C-plus-plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Sistem_de_depanare_a_aplicatiilor_in_limbajul_C-plus-plus&amp;diff=1631"/>
				<updated>2005-12-20T23:33:54Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Acest tutorial de programare este realizat cu ajutorul Bibliotecii [http://www.trolltech.com/products/qt/index.html Qt versiunea 3.x], dar se poate adapta uşor folosind orice altă bibliotecă.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Când dezvoltăm aplicaţii de proporţii (sau poate mai simple), pot aparea momente în care aplicaţia noastră să nu mai facă ce ne aşteptam noi sa faca şi incepem să ne punem (firesc) întrebarea &amp;quot;Acum ce s-a mai întâmplat?&amp;quot;.&lt;br /&gt;
Pentru a ne ajuta în această privinţă, ne putem construi o mulţime de unelte. Voi enumera o parte dintre ele:&lt;br /&gt;
* depanare prin executia programului folosind ''breakpoints'' si/sau linie cu linie;&lt;br /&gt;
* scrierea unor mesaje într-un fişier de log;&lt;br /&gt;
* scrierea unor mesaje într-o consola;&lt;br /&gt;
* aruncarea şi prinderea excepţiilor;&lt;br /&gt;
Folosirea unor ''breakpoints'' nu face cazul acestui tutorial.&lt;br /&gt;
Aruncarea şi prinderea excepţiilor este o tehnologie mult prea complex pentru a fi detaliat aici; există  suficient material pe internet pentru aceasta.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mesaje intr-o consola==&lt;br /&gt;
----&lt;br /&gt;
Sa presupunem ca la un moment dat avem nevoie sa obtinem valorile unor variabile care nu se pot afla prin ''breakpoints''; de exemplu într-o funcţie de reîmprospatare a unei ferestre, care se apelează într-un ciclu infinit. Aceste valori le putem afla prin două modalitaţi: scrierea lor intr-un fişier de log sau afişarea lor intr-o consolă. Fiecare dintre cele două are avantaje şi dezavantaje.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''consolă - avantaje (faţă de log)''':&lt;br /&gt;
* mesajele se pot urmări În timpul rulării programului&lt;br /&gt;
* nu necesită spaţiu suplimentar pe Hard Disk Drive (HDD)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''consolă - dezavantaje (faţă de log)''':&lt;br /&gt;
* consumă resurse suplimentare&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Crearea consolei'''&lt;br /&gt;
- '''kdsconsole.h'''&lt;br /&gt;
 /***************************************************************************&lt;br /&gt;
 *   Copyright (C) 2005 Radu Bolovan                                       *&lt;br /&gt;
 *   radubolovan@dainet.ro                                                 *&lt;br /&gt;
 *                                                                         *&lt;br /&gt;
 *   This is free software; you can redistribute it and/or modify it       *&lt;br /&gt;
 *   under the terms of the GNU General Public License as published by     *&lt;br /&gt;
 *   the Free Software Foundation; either version 2 of the License, or     *&lt;br /&gt;
 *   (at your option) any later version.                                   *&lt;br /&gt;
 *                                                                         *&lt;br /&gt;
 *   This program is distributed in the hope that it will be useful,       *&lt;br /&gt;
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *&lt;br /&gt;
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *&lt;br /&gt;
 *   GNU General Public License for more details.                          *&lt;br /&gt;
 *                                                                         *&lt;br /&gt;
 *   You should have received a copy of the GNU General Public License     *&lt;br /&gt;
 *   along with this program; if not, write to the                         *&lt;br /&gt;
 *   Free Software Foundation, Inc.,                                       *&lt;br /&gt;
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *&lt;br /&gt;
 ***************************************************************************/&lt;br /&gt;
 #ifndef KDSCONSOLE_H&lt;br /&gt;
 #define KDSCONSOLE_H&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;qtextedit.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 class KDSConsole : public QTextEdit&lt;br /&gt;
 {&lt;br /&gt;
     public:&lt;br /&gt;
     KDSConsole( QWidget *parent = 0, const char *name = 0 );&lt;br /&gt;
     ~KDSConsole();&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 extern KDSConsole *g_pConsole;&lt;br /&gt;
 &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
- '''kdsconsole.cpp'''&lt;br /&gt;
 #include &amp;quot;kdsconsole.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 KDSConsole *g_pConsole = NULL;&lt;br /&gt;
 &lt;br /&gt;
 KDSConsole::KDSConsole( QWidget *parent, const char *name )&lt;br /&gt;
 : QTextEdit( parent, name )&lt;br /&gt;
 {&lt;br /&gt;
      setReadOnly( true );&lt;br /&gt;
      setAlignment ( Qt::AlignLeft );&lt;br /&gt;
      setMinimumSize( 640, 150 );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 KDSConsole::~KDSConsole()&lt;br /&gt;
 {}&lt;br /&gt;
&lt;br /&gt;
Dupa cum se vede am declarat şi definit o variabilă globală de tipul '''KDSConsole''', externă - pentru a o putea apela din orice fişier. Pentru folosirea unui astfel de obiect ('''KDSConsole''') voi mai adăuga incă două metode, faţă de cel obişnuit:&lt;br /&gt;
 g_pConsole = new KDSConsole();&lt;br /&gt;
 &lt;br /&gt;
 //ceva cod&lt;br /&gt;
 &lt;br /&gt;
 g_pConsole-&amp;gt;append( &amp;quot;Test in consola&amp;quot; ); //functia append() apartine clasei QTextEdit&lt;br /&gt;
 &lt;br /&gt;
 //alt cod&lt;br /&gt;
 &lt;br /&gt;
 delete g_pConsole;&lt;br /&gt;
&lt;br /&gt;
1) Trei funcţii statice ale unei clase:&lt;br /&gt;
&lt;br /&gt;
- '''kdsutils.h'''&lt;br /&gt;
 #ifndef KDSUTILS_H&lt;br /&gt;
 #define KDSUTILS_H&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;kdsconsole.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;qstring.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 class KDSUtils&lt;br /&gt;
 {&lt;br /&gt;
     public:&lt;br /&gt;
     KDSUtils(){;}&lt;br /&gt;
     ~KDSUtils(){;}&lt;br /&gt;
 &lt;br /&gt;
     static void InitConsole(){ g_pConsole = new KDSConsole(); }&lt;br /&gt;
     static void AppendToConsole( QString str ){ if( g_pConsole ) g_pConsole-&amp;gt;append( str ); }&lt;br /&gt;
     static void DestroyConsole(){ if( g_pConsole ) { delete g_pConsole; g_pConsole = NULL; } }&lt;br /&gt;
 };&lt;br /&gt;
  &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Acestea se pot apela (după cum se cunoaşte) prin:&lt;br /&gt;
 KDSUtils::InitConsole(); //numai la initializarea aplicatiei&lt;br /&gt;
 &lt;br /&gt;
 //ceva cod&lt;br /&gt;
 &lt;br /&gt;
 KDSUtils::AppendToConsole( &amp;quot;Un text in consola&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
 //alt cod&lt;br /&gt;
 &lt;br /&gt;
 KDSUtils::DestroyConsole(); //cand nu mai avem nevoie de consola&lt;br /&gt;
&lt;br /&gt;
2) Trei macro-uri:&lt;br /&gt;
&lt;br /&gt;
- '''kdsdefs.h'''&lt;br /&gt;
 #ifndef KDSUTILS_H&lt;br /&gt;
 #define KDSUTILS_H&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;kdsconsole.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;qstring.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #define INIT_CONSOLE() KDSUtils::InitConsole()&lt;br /&gt;
 #define KDS_TRACE( string ) KDSUtils::AppendToConsole( string )&lt;br /&gt;
 #define DESTROY_CONSOLE() KDSUtils::DestroyConsole()&lt;br /&gt;
 &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Observatii:&lt;br /&gt;
&lt;br /&gt;
1) Nu folosiţi mai mult de una dintre cele trei metode!!!&lt;br /&gt;
&lt;br /&gt;
2) Acelaşi efect se poate obţine punând&lt;br /&gt;
 printf( &amp;quot;Un text catre consola&amp;quot; );&lt;br /&gt;
oriunde in cod si rularea programului din consolă (KConsole)&lt;br /&gt;
&lt;br /&gt;
3) Funcţia de adăugare a unui text în consolă se mai poate implementa astfel încat sa primească un numar nelimitat de parametrii şi să funcţioneze analog funcţiei '''sprintf()'''.&lt;br /&gt;
&lt;br /&gt;
--[[User:Radubolovan|Radu Bolovan]] 01:32, 21 December 2005 (EET)&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorial]]&lt;br /&gt;
[[Category:Programming]]&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Sistem_de_depanare_a_aplicatiilor_in_limbajul_C-plus-plus&amp;diff=1630</id>
		<title>Sistem de depanare a aplicatiilor in limbajul C-plus-plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Sistem_de_depanare_a_aplicatiilor_in_limbajul_C-plus-plus&amp;diff=1630"/>
				<updated>2005-12-20T23:33:28Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Acest tutorial de programare este realizat cu ajutorul Bibliotecii [http://www.trolltech.com/products/qt/index.html Qt versiunea 3.x], dar se poate adapta uşor folosind orice altă bibliotecă.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Când dezvoltăm aplicaţii de proporţii (sau poate mai simple), pot aparea momente în care aplicaţia noastră să nu mai facă ce ne aşteptam noi sa faca şi incepem să ne punem (firesc) întrebarea &amp;quot;Acum ce s-a mai întâmplat?&amp;quot;.&lt;br /&gt;
Pentru a ne ajuta în această privinţă, ne putem construi o mulţime de unelte. Voi enumera o parte dintre ele:&lt;br /&gt;
* depanare prin executia programului folosind ''breakpoints'' si/sau linie cu linie;&lt;br /&gt;
* scrierea unor mesaje într-un fişier de log;&lt;br /&gt;
* scrierea unor mesaje într-o consola;&lt;br /&gt;
* aruncarea şi prinderea excepţiilor;&lt;br /&gt;
Folosirea unor ''breakpoints'' nu face cazul acestui tutorial.&lt;br /&gt;
Aruncarea şi prinderea excepţiilor este o tehnologie mult prea complex pentru a fi detaliat aici; există  suficient material pe internet pentru aceasta.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mesaje intr-o consola==&lt;br /&gt;
----&lt;br /&gt;
Sa presupunem ca la un moment dat avem nevoie sa obtinem valorile unor variabile care nu se pot afla prin ''breakpoints''; de exemplu într-o funcţie de reîmprospatare a unei ferestre, care se apelează într-un ciclu infinit. Aceste valori le putem afla prin două modalitaţi: scrierea lor intr-un fişier de log sau afişarea lor intr-o consolă. Fiecare dintre cele două are avantaje şi dezavantaje.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''consolă - avantaje (faţă de log)''':&lt;br /&gt;
* mesajele se pot urmări În timpul rulării programului&lt;br /&gt;
* nu necesită spaţiu suplimentar pe Hard Disk Drive (HDD)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''consolă - dezavantaje (faţă de log)''':&lt;br /&gt;
* consumă resurse suplimentare&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Crearea consolei'''&lt;br /&gt;
- '''kdsconsole.h'''&lt;br /&gt;
 /***************************************************************************&lt;br /&gt;
 *   Copyright (C) 2005 Radu Bolovan                                       *&lt;br /&gt;
 *   radubolovan@dainet.ro                                                 *&lt;br /&gt;
 *                                                                         *&lt;br /&gt;
 *   This is free software; you can redistribute it and/or modify it       *&lt;br /&gt;
 *   under the terms of the GNU General Public License as published by     *&lt;br /&gt;
 *   the Free Software Foundation; either version 2 of the License, or     *&lt;br /&gt;
 *   (at your option) any later version.                                   *&lt;br /&gt;
 *                                                                         *&lt;br /&gt;
 *   This program is distributed in the hope that it will be useful,       *&lt;br /&gt;
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *&lt;br /&gt;
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *&lt;br /&gt;
 *   GNU General Public License for more details.                          *&lt;br /&gt;
 *                                                                         *&lt;br /&gt;
 *   You should have received a copy of the GNU General Public License     *&lt;br /&gt;
 *   along with this program; if not, write to the                         *&lt;br /&gt;
 *   Free Software Foundation, Inc.,                                       *&lt;br /&gt;
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *&lt;br /&gt;
 ***************************************************************************/&lt;br /&gt;
 #ifndef KDSCONSOLE_H&lt;br /&gt;
 #define KDSCONSOLE_H&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;qtextedit.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 class KDSConsole : public QTextEdit&lt;br /&gt;
 {&lt;br /&gt;
     public:&lt;br /&gt;
     KDSConsole( QWidget *parent = 0, const char *name = 0 );&lt;br /&gt;
     ~KDSConsole();&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 extern KDSConsole *g_pConsole;&lt;br /&gt;
 &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
- '''kdsconsole.cpp'''&lt;br /&gt;
 #include &amp;quot;kdsconsole.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 KDSConsole *g_pConsole = NULL;&lt;br /&gt;
 &lt;br /&gt;
 KDSConsole::KDSConsole( QWidget *parent, const char *name )&lt;br /&gt;
 : QTextEdit( parent, name )&lt;br /&gt;
 {&lt;br /&gt;
      setReadOnly( true );&lt;br /&gt;
      setAlignment ( Qt::AlignLeft );&lt;br /&gt;
      setMinimumSize( 640, 150 );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 KDSConsole::~KDSConsole()&lt;br /&gt;
 {}&lt;br /&gt;
&lt;br /&gt;
Dupa cum se vede am declarat şi definit o variabilă globală de tipul '''KDSConsole''', externă - pentru a o putea apela din orice fişier. Pentru folosirea unui astfel de obiect ('''KDSConsole''') voi mai adăuga incă două metode, faţă de cel obişnuit:&lt;br /&gt;
 g_pConsole = new KDSConsole();&lt;br /&gt;
 &lt;br /&gt;
 //ceva cod&lt;br /&gt;
 &lt;br /&gt;
 g_pConsole-&amp;gt;append( &amp;quot;Test in consola&amp;quot; ); //functia append() apartine clasei QTextEdit&lt;br /&gt;
 &lt;br /&gt;
 //alt cod&lt;br /&gt;
 &lt;br /&gt;
 delete g_pConsole;&lt;br /&gt;
&lt;br /&gt;
1) Trei funcţii statice ale unei clase:&lt;br /&gt;
&lt;br /&gt;
- '''kdsutils.h'''&lt;br /&gt;
 #ifndef KDSUTILS_H&lt;br /&gt;
 #define KDSUTILS_H&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;kdsconsole.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;qstring.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 class KDSUtils&lt;br /&gt;
 {&lt;br /&gt;
     public:&lt;br /&gt;
     KDSUtils(){;}&lt;br /&gt;
     ~KDSUtils(){;}&lt;br /&gt;
 &lt;br /&gt;
     static void InitConsole(){ g_pConsole = new KDSConsole(); }&lt;br /&gt;
     static void AppendToConsole( QString str ){ if( g_pConsole ) g_pConsole-&amp;gt;append( str ); }&lt;br /&gt;
     static void DestroyConsole(){ if( g_pConsole ) { delete g_pConsole; g_pConsole = NULL; } }&lt;br /&gt;
 };&lt;br /&gt;
  &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Acestea se pot apela (după cum se cunoaşte) prin:&lt;br /&gt;
 KDSUtils::InitConsole(); //numai la initializarea aplicatiei&lt;br /&gt;
 &lt;br /&gt;
 //ceva cod&lt;br /&gt;
 &lt;br /&gt;
 KDSUtils::AppendToConsole( &amp;quot;Un text in consola&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
 //alt cod&lt;br /&gt;
 &lt;br /&gt;
 KDSUtils::DestroyConsole(); //cand nu mai avem nevoie de consola&lt;br /&gt;
&lt;br /&gt;
2) Trei macro-uri:&lt;br /&gt;
&lt;br /&gt;
- '''kdsdefs.h'''&lt;br /&gt;
 #ifndef KDSUTILS_H&lt;br /&gt;
 #define KDSUTILS_H&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;kdsconsole.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;qstring.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #define INIT_CONSOLE() KDSUtils::InitConsole()&lt;br /&gt;
 #define KDS_TRACE( string ) KDSUtils::AppendToConsole( string )&lt;br /&gt;
 #define DESTROY_CONSOLE() KDSUtils::DestroyConsole()&lt;br /&gt;
 &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Observatii:&lt;br /&gt;
1) Nu folosiţi mai mult de una dintre cele trei metode!!!&lt;br /&gt;
&lt;br /&gt;
2) Acelaşi efect se poate obţine punând&lt;br /&gt;
 printf( &amp;quot;Un text catre consola&amp;quot; );&lt;br /&gt;
oriunde in cod si rularea programului din consolă (KConsole)&lt;br /&gt;
&lt;br /&gt;
3) Funcţia de adăugare a unui text în consolă se mai poate implementa astfel încat sa primească un numar nelimitat de parametrii şi să funcţioneze analog funcţiei '''sprintf()'''.&lt;br /&gt;
&lt;br /&gt;
--[[User:Radubolovan|Radu Bolovan]] 01:32, 21 December 2005 (EET)&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorial]]&lt;br /&gt;
[[Category:Programming]]&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Sistem_de_depanare_a_aplicatiilor_in_limbajul_C-plus-plus&amp;diff=1629</id>
		<title>Sistem de depanare a aplicatiilor in limbajul C-plus-plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Sistem_de_depanare_a_aplicatiilor_in_limbajul_C-plus-plus&amp;diff=1629"/>
				<updated>2005-12-20T23:32:21Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Acest tutorial de programare este realizat cu ajutorul Bibliotecii [http://www.trolltech.com/products/qt/index.html Qt versiunea 3.x], dar se poate adapta uşor folosind orice altă bibliotecă.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Când dezvoltăm aplicaţii de proporţii (sau poate mai simple), pot aparea momente în care aplicaţia noastră să nu mai facă ce ne aşteptam noi sa faca şi incepem să ne punem (firesc) întrebarea &amp;quot;Acum ce s-a mai întâmplat?&amp;quot;.&lt;br /&gt;
Pentru a ne ajuta în această privinţă, ne putem construi o mulţime de unelte. Voi enumera o parte dintre ele:&lt;br /&gt;
* depanare prin executia programului folosind ''breakpoints'' si/sau linie cu linie;&lt;br /&gt;
* scrierea unor mesaje într-un fişier de log;&lt;br /&gt;
* scrierea unor mesaje într-o consola;&lt;br /&gt;
* aruncarea şi prinderea excepţiilor;&lt;br /&gt;
Folosirea unor ''breakpoints'' nu face cazul acestui tutorial.&lt;br /&gt;
Aruncarea şi prinderea excepţiilor este o tehnologie mult prea complex pentru a fi detaliat aici; există  suficient material pe internet pentru aceasta.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mesaje intr-o consola==&lt;br /&gt;
----&lt;br /&gt;
Sa presupunem ca la un moment dat avem nevoie sa obtinem valorile unor variabile care nu se pot afla prin ''breakpoints''; de exemplu într-o funcţie de reîmprospatare a unei ferestre, care se apelează într-un ciclu infinit. Aceste valori le putem afla prin două modalitaţi: scrierea lor intr-un fişier de log sau afişarea lor intr-o consolă. Fiecare dintre cele două are avantaje şi dezavantaje.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''consolă - avantaje (faţă de log)''':&lt;br /&gt;
* mesajele se pot urmări În timpul rulării programului&lt;br /&gt;
* nu necesită spaţiu suplimentar pe Hard Disk Drive (HDD)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''consolă - dezavantaje (faţă de log)''':&lt;br /&gt;
* consumă resurse suplimentare&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Crearea consolei'''&lt;br /&gt;
- '''kdsconsole.h'''&lt;br /&gt;
 /***************************************************************************&lt;br /&gt;
 *   Copyright (C) 2005 Radu Bolovan                                       *&lt;br /&gt;
 *   radubolovan@dainet.ro                                                 *&lt;br /&gt;
 *                                                                         *&lt;br /&gt;
 *   This is free software; you can redistribute it and/or modify it       *&lt;br /&gt;
 *   under the terms of the GNU General Public License as published by     *&lt;br /&gt;
 *   the Free Software Foundation; either version 2 of the License, or     *&lt;br /&gt;
 *   (at your option) any later version.                                   *&lt;br /&gt;
 *                                                                         *&lt;br /&gt;
 *   This program is distributed in the hope that it will be useful,       *&lt;br /&gt;
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *&lt;br /&gt;
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *&lt;br /&gt;
 *   GNU General Public License for more details.                          *&lt;br /&gt;
 *                                                                         *&lt;br /&gt;
 *   You should have received a copy of the GNU General Public License     *&lt;br /&gt;
 *   along with this program; if not, write to the                         *&lt;br /&gt;
 *   Free Software Foundation, Inc.,                                       *&lt;br /&gt;
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *&lt;br /&gt;
 ***************************************************************************/&lt;br /&gt;
 #ifndef KDSCONSOLE_H&lt;br /&gt;
 #define KDSCONSOLE_H&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;qtextedit.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 class KDSConsole : public QTextEdit&lt;br /&gt;
 {&lt;br /&gt;
     public:&lt;br /&gt;
     KDSConsole( QWidget *parent = 0, const char *name = 0 );&lt;br /&gt;
     ~KDSConsole();&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 extern KDSConsole *g_pConsole;&lt;br /&gt;
 &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
- '''kdsconsole.cpp'''&lt;br /&gt;
 #include &amp;quot;kdsconsole.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 KDSConsole *g_pConsole = NULL;&lt;br /&gt;
 &lt;br /&gt;
 KDSConsole::KDSConsole( QWidget *parent, const char *name )&lt;br /&gt;
 : QTextEdit( parent, name )&lt;br /&gt;
 {&lt;br /&gt;
      setReadOnly( true );&lt;br /&gt;
      setAlignment ( Qt::AlignLeft );&lt;br /&gt;
      setMinimumSize( 640, 150 );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 KDSConsole::~KDSConsole()&lt;br /&gt;
 {}&lt;br /&gt;
&lt;br /&gt;
Dupa cum se vede am declarat şi definit o variabilă globală de tipul '''KDSConsole''', externă - pentru a o putea apela din orice fişier. Pentru folosirea unui astfel de obiect ('''KDSConsole''') voi mai adăuga incă două metode, faţă de cel obişnuit:&lt;br /&gt;
 g_pConsole = new KDSConsole();&lt;br /&gt;
 &lt;br /&gt;
 //ceva cod&lt;br /&gt;
 &lt;br /&gt;
 g_pConsole-&amp;gt;append( &amp;quot;Test in consola&amp;quot; ); //functia append() apartine clasei QTextEdit&lt;br /&gt;
 &lt;br /&gt;
 //alt cod&lt;br /&gt;
 &lt;br /&gt;
 delete g_pConsole;&lt;br /&gt;
&lt;br /&gt;
1) Trei funcţii statice ale unei clase:&lt;br /&gt;
&lt;br /&gt;
- '''kdsutils.h'''&lt;br /&gt;
 #ifndef KDSUTILS_H&lt;br /&gt;
 #define KDSUTILS_H&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;kdsconsole.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;qstring.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 class KDSUtils&lt;br /&gt;
 {&lt;br /&gt;
     public:&lt;br /&gt;
     KDSUtils(){;}&lt;br /&gt;
     ~KDSUtils(){;}&lt;br /&gt;
 &lt;br /&gt;
     static void InitConsole(){ g_pConsole = new KDSConsole(); }&lt;br /&gt;
     static void AppendToConsole( QString str ){ if( g_pConsole ) g_pConsole-&amp;gt;append( str ); }&lt;br /&gt;
     static void DestroyConsole(){ if( g_pConsole ) { delete g_pConsole; g_pConsole = NULL; } }&lt;br /&gt;
 };&lt;br /&gt;
  &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Acestea se pot apela (după cum se cunoaşte) prin:&lt;br /&gt;
 KDSUtils::InitConsole(); //numai la initializarea aplicatiei&lt;br /&gt;
 &lt;br /&gt;
 //ceva cod&lt;br /&gt;
 &lt;br /&gt;
 KDSUtils::AppendToConsole( &amp;quot;Un text in consola&amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
 //alt cod&lt;br /&gt;
 &lt;br /&gt;
 KDSUtils::DestroyConsole(); //cand nu mai avem nevoie de consola&lt;br /&gt;
&lt;br /&gt;
2) Trei macro-uri:&lt;br /&gt;
&lt;br /&gt;
- '''kdsdefs.h'''&lt;br /&gt;
 #ifndef KDSUTILS_H&lt;br /&gt;
 #define KDSUTILS_H&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;kdsconsole.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;qstring.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #define INIT_CONSOLE() KDSUtils::InitConsole()&lt;br /&gt;
 #define KDS_TRACE( string ) KDSUtils::AppendToConsole( string )&lt;br /&gt;
 #define DESTROY_CONSOLE() KDSUtils::DestroyConsole()&lt;br /&gt;
 &lt;br /&gt;
 #endif&lt;br /&gt;
&lt;br /&gt;
Observatii:&lt;br /&gt;
1) Nu folosiţi mai mult de una dintre cele trei metode!!!&lt;br /&gt;
2) Acelaşi efect se poate obţine punând&lt;br /&gt;
 printf( &amp;quot;Un text catre consola&amp;quot; );&lt;br /&gt;
oriunde in cod si rularea programului din consolă (KConsole)&lt;br /&gt;
3) Funcţia de adăugare a unui text în consolă se mai poate implementa astfel încat sa primească un numar nelimitat de parametrii şi să funcţioneze analog funcţiei '''sprintf()'''.&lt;br /&gt;
&lt;br /&gt;
--[[User:Radubolovan|Radu Bolovan]] 01:32, 21 December 2005 (EET)&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorial]]&lt;br /&gt;
[[Category:Programming]]&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Talk:Tutorials&amp;diff=1413</id>
		<title>Talk:Tutorials</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Talk:Tutorials&amp;diff=1413"/>
				<updated>2005-11-23T20:38:50Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: /* Re: Despre politica */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sa fim totusi oameni ==&lt;br /&gt;
&lt;br /&gt;
* Hai sa nu mai postam anonim, okay? Multumesc ;-) [[User:Csdexter|@Dexter]] 01:45, 11 November 2005 (EET)&lt;br /&gt;
&lt;br /&gt;
== Corecturi si adaugiri ==&lt;br /&gt;
&lt;br /&gt;
* Multumesc pentru corectura, [[User:Raptor360|raptor360]] [[User:Csdexter|@Dexter]] 21:14, 11 November 2005 (EET)&lt;br /&gt;
&lt;br /&gt;
== Despre politica ==&lt;br /&gt;
&lt;br /&gt;
* Avem doua categorii principale dupa scopul, forma si destinatia documentului ([[:Category:Tutorial|tutorial]] si [[:Category:HowTo|ghid]]) si vom avea cateva (mai multe) categorii secundare dupa domeniul acoperit de acesta (e.g. [[:Category:VM|masini virtuale]], [[:Category:Drivers|drivere]], [[:Category:Programming|programare]]). Pe prima pagina vor fi afisate doar cele doua categorii principale ca si capete de lista urmand ca, in paranteza dupa numele articolului, sa fie trecute categoriile secundare din care acesta face parte. Din pacate, paginile de prezentare nu isi au locul in aceasta structura deoarece scopul acestui Wiki nu este reclama pentru terti. Ca atare, am sa editez pagina principala si il rog pe [[User:Radubolovan|Radu]] sa revina cu un [[:Category:HowTo|ghid de instalare]] sau [[:Category:Tutorial|tutorial]] pentru [[KDSFlash]] astfel ca articolul sau sa poata fi prins in tematica. [[User:Csdexter|@Dexter]] 11:52, 23 November 2005 (EET)&lt;br /&gt;
&lt;br /&gt;
== Re: Despre politica ==&lt;br /&gt;
&lt;br /&gt;
Scuze pentru purtarea mea! Cu toate ca nu stiam care sunt regulile, totusi trebuia sa obtin o aprobare (ma gandesc eu) ca sa fac o alta categorie! Voi face un tutorial - curand! [[User:Radubolovan|Radu Bolovan]] 22:38, 23 November 2005 (EET)&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Talk:Tutorials&amp;diff=1412</id>
		<title>Talk:Tutorials</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Talk:Tutorials&amp;diff=1412"/>
				<updated>2005-11-23T20:34:56Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: Re: Despre politica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sa fim totusi oameni ==&lt;br /&gt;
&lt;br /&gt;
* Hai sa nu mai postam anonim, okay? Multumesc ;-) [[User:Csdexter|@Dexter]] 01:45, 11 November 2005 (EET)&lt;br /&gt;
&lt;br /&gt;
== Corecturi si adaugiri ==&lt;br /&gt;
&lt;br /&gt;
* Multumesc pentru corectura, [[User:Raptor360|raptor360]] [[User:Csdexter|@Dexter]] 21:14, 11 November 2005 (EET)&lt;br /&gt;
&lt;br /&gt;
== Despre politica ==&lt;br /&gt;
&lt;br /&gt;
* Avem doua categorii principale dupa scopul, forma si destinatia documentului ([[:Category:Tutorial|tutorial]] si [[:Category:HowTo|ghid]]) si vom avea cateva (mai multe) categorii secundare dupa domeniul acoperit de acesta (e.g. [[:Category:VM|masini virtuale]], [[:Category:Drivers|drivere]], [[:Category:Programming|programare]]). Pe prima pagina vor fi afisate doar cele doua categorii principale ca si capete de lista urmand ca, in paranteza dupa numele articolului, sa fie trecute categoriile secundare din care acesta face parte. Din pacate, paginile de prezentare nu isi au locul in aceasta structura deoarece scopul acestui Wiki nu este reclama pentru terti. Ca atare, am sa editez pagina principala si il rog pe [[User:Radubolovan|Radu]] sa revina cu un [[:Category:HowTo|ghid de instalare]] sau [[:Category:Tutorial|tutorial]] pentru [[KDSFlash]] astfel ca articolul sau sa poata fi prins in tematica. [[User:Csdexter|@Dexter]] 11:52, 23 November 2005 (EET)&lt;br /&gt;
&lt;br /&gt;
== Re: Despre politica ==&lt;br /&gt;
&lt;br /&gt;
Scuze pentru purtarea mea! Cu toate ca nu stiam care sunt regulile, totusi trebuia sa obtin o aprobare (ma gandesc eu) ca sa fac o alta categorie! Voi face un tutorial - curand!&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Main_Page&amp;diff=1398</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Main_Page&amp;diff=1398"/>
				<updated>2005-11-23T09:20:35Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A început migrarea tutorialelor şi ghidurilor (HowTo) din forum în Wiki -- nu ezitaţi să daţi o mână de ajutor ;-)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ultimele 5 [[:Category:HowTo|ghiduri]] actualizate:&lt;br /&gt;
** [[MU Online sub wine|MU Online rulat cu Wine]] (maşini virtuale/jocuri)&lt;br /&gt;
** [[Download si instalare E17 din CVS|Instalare automatizată E17 CVS]] (medii grafice)&lt;br /&gt;
** [[Imagini partitii cu dd|Imagini de partiţii cu &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt;]] (backup)&lt;br /&gt;
** [[Instalare Qemu|Instalarea emulatorului Qemu]] (maşini virtuale)&lt;br /&gt;
** [[ATi video (2.6)|Placă video ATi pe nucleu 2.6]] (drivere)&lt;br /&gt;
* Ultimele 5 [[:Category:Tutorial|tutoriale]] actualizate:&lt;br /&gt;
** [[Supra%C3%AEnc%C4%83rcarea operatorilor %C3%AEn limbajul C-plus-plus|Supraîncărcarea operatorilor în ANSI C++]] (programare)&lt;br /&gt;
** [[Iptables romana|Introducere în &amp;lt;tt&amp;gt;iptables&amp;lt;/tt&amp;gt;]] (filtrare trafic)&lt;br /&gt;
* Ultimele 5 [[:Category:Aplicatii|aplicatii]] actualizate:&lt;br /&gt;
** [[KDSFlash|KDSFlash]] (editor animatie)&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=KDSFlash&amp;diff=1397</id>
		<title>KDSFlash</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=KDSFlash&amp;diff=1397"/>
				<updated>2005-11-23T09:18:58Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aplicatia isi propune a fi un bun editor de animatie cu export pentru web (in format '''swf''' si in format propriu - '''dsfx''').&lt;br /&gt;
&lt;br /&gt;
KDSFlash este o aplicatie Open Source si Free Software, realizat sub licenta GNU General Public License publicata de Free Software Foundation. Originalul acestei licente se afla la [http://www.gnu.org/copyleft/gpl.html http://www.gnu.org/copyleft/gpl.html] si o traducere neoficiala la [http://www.roedu.net/gplro.html http://www.roedu.net/gplro.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Site-ul oficial al aplicatiei este [http://kdsflash.darkstarlinux.ro http://kdsflash.darkstarlinux.ro]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[User:Radubolovan|Radu Bolovan]] 11:15, 23 November 2005 (EET)&lt;br /&gt;
&lt;br /&gt;
 [[Category:Aplicatii]]&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Main_Page&amp;diff=1396</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Main_Page&amp;diff=1396"/>
				<updated>2005-11-23T09:07:52Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A început migrarea tutorialelor şi ghidurilor (HowTo) din forum în Wiki -- nu ezitaţi să daţi o mână de ajutor ;-)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ultimele 5 [[:Category:HowTo|ghiduri]] actualizate:&lt;br /&gt;
** [[MU Online sub wine|MU Online rulat cu Wine]] (maşini virtuale/jocuri)&lt;br /&gt;
** [[Download si instalare E17 din CVS|Instalare automatizată E17 CVS]] (medii grafice)&lt;br /&gt;
** [[Imagini partitii cu dd|Imagini de partiţii cu &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt;]] (backup)&lt;br /&gt;
** [[Instalare Qemu|Instalarea emulatorului Qemu]] (maşini virtuale)&lt;br /&gt;
** [[ATi video (2.6)|Placă video ATi pe nucleu 2.6]] (drivere)&lt;br /&gt;
* Ultimele 5 [[:Category:Tutorial|tutoriale]] actualizate:&lt;br /&gt;
** [[Supra%C3%AEnc%C4%83rcarea operatorilor %C3%AEn limbajul C-plus-plus|Supraîncărcarea operatorilor în ANSI C++]] (programare)&lt;br /&gt;
** [[Iptables romana|Introducere în &amp;lt;tt&amp;gt;iptables&amp;lt;/tt&amp;gt;]] (filtrare trafic)&lt;br /&gt;
* Ultimele 5 [[:Category:Aplicatii|aplicatii]] actualizate:&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Category:Aplicatii&amp;diff=1395</id>
		<title>Category:Aplicatii</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Category:Aplicatii&amp;diff=1395"/>
				<updated>2005-11-23T09:06:58Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Această sectiune contine articole despre diverse aplicatii.&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=User:Radubolovan&amp;diff=1394</id>
		<title>User:Radubolovan</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=User:Radubolovan&amp;diff=1394"/>
				<updated>2005-11-23T08:52:21Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: /* Radu - Dumitru Bolovan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Radu - Dumitru Bolovan==&lt;br /&gt;
[mailto:radubolovan@dainet.ro e-mail]&lt;br /&gt;
&lt;br /&gt;
Y!M: radudumitru_bolovan&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=User:Radubolovan&amp;diff=1393</id>
		<title>User:Radubolovan</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=User:Radubolovan&amp;diff=1393"/>
				<updated>2005-11-23T08:52:06Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: /* Radu - Dumitru Bolovan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Radu - Dumitru Bolovan==&lt;br /&gt;
[mailto:radubolovan@dainet.ro e-mail],&lt;br /&gt;
&lt;br /&gt;
Y!M: radudumitru_bolovan&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=User:Radubolovan&amp;diff=1392</id>
		<title>User:Radubolovan</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=User:Radubolovan&amp;diff=1392"/>
				<updated>2005-11-23T08:51:49Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: /* Radu - Dumitru Bolovan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Radu - Dumitru Bolovan==&lt;br /&gt;
[mailto:radubolovan@dainet.ro e-mail],&lt;br /&gt;
Y!M: radudumitru_bolovan&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=User:Radubolovan&amp;diff=1391</id>
		<title>User:Radubolovan</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=User:Radubolovan&amp;diff=1391"/>
				<updated>2005-11-23T08:51:36Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Radu - Dumitru Bolovan==&lt;br /&gt;
[mailto:radubolovan@dainet.ro e-mail], Y!M: radudumitru_bolovan&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Talk:Supra%C3%83%C2%AEnc%C3%84%C6%92rcarea_operatorilor_%C3%83%C2%AEn_limbajul_C-plus-plus&amp;diff=1390</id>
		<title>Talk:SupraÃ®ncÄƒrcarea operatorilor Ã®n limbajul C-plus-plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Talk:Supra%C3%83%C2%AEnc%C3%84%C6%92rcarea_operatorilor_%C3%83%C2%AEn_limbajul_C-plus-plus&amp;diff=1390"/>
				<updated>2005-11-23T08:49:08Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: /* Despre continut */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Despre continut ==&lt;br /&gt;
* Am scos eu comentariile din cod pentru ca stilul WikiPedia (pe care il urmam ca model) este impersonal. As dori sa multumesc aici lui [[User:andreich]] si lui [[User:Radubolovan|Radu Bolovan]] pentru contributiile aduse la exemplul de C++ dat in articol. [[User:Csdexter|@Dexter]] 12:43, 22 November 2005 (EET)&lt;br /&gt;
* Multumim lui [[User:Radubolovan|Radu Bolovan]] pentru corectura negatiei (Ar fi mai simplu). [[User:Csdexter|@Dexter]] 22:08, 22 November 2005 (EET)&lt;br /&gt;
* Si eu iti multumesc [[User:Csdexter|@Dexter]] pentru forma actuala a paginii. Arata mult mai bine asa cum este acum decat cum o facusem eu! [[User:Radubolovan|Radu Bolovan]] 10:42, 23 November 2005 (EET)&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Supra%C3%83%C2%AEnc%C3%84%C6%92rcarea_operatorilor_%C3%83%C2%AEn_limbajul_C-plus-plus&amp;diff=1386</id>
		<title>SupraÃ®ncÄƒrcarea operatorilor Ã®n limbajul C-plus-plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Supra%C3%83%C2%AEnc%C3%84%C6%92rcarea_operatorilor_%C3%83%C2%AEn_limbajul_C-plus-plus&amp;diff=1386"/>
				<updated>2005-11-22T19:54:59Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: /* Introducere */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Titlul oribil este rezultatul unei limitări in Wiki -- imediat ce se rezolvă, vom face şi titul mai uşor de privit''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Introducere ==&lt;br /&gt;
Operatiile de baza sunt implementate in limbajul C++ cu ajutorul operatorilor. In limbajul C++ operatorii sunt, de fapt, functii. Operatorii oferiti de limbaj pot ''lucra'' decat asupra tipurilor de date predefinite. Pentru a folosi operatorii asupra tipurilor de date construite de noi, limbajul C++ ne ofera un mecanism care se numeste '''supraincarcarea operatorilor'''.&lt;br /&gt;
&lt;br /&gt;
De ce am avea nevoie de asa ceva? Dupa cum se stie se poate crea o functie a unei clase care sa faca exact ce ar face un operator si care sa o definim (de exemplu) '''suma'''. Atunci am apela acea metoda astfel:&lt;br /&gt;
&lt;br /&gt;
 Obiect ob1;&lt;br /&gt;
 Obiect ob2;&lt;br /&gt;
 Obiect ob3 = ob1.suma( ob2 );&lt;br /&gt;
&lt;br /&gt;
Cam greoi! Ar fi mai simplu daca am scrie aşa:&lt;br /&gt;
 Obiect ob3 = ob1 + ob2;&lt;br /&gt;
&lt;br /&gt;
Astfel s-a ajuns la nevoia de a supraincarcarea operatorii!&lt;br /&gt;
&lt;br /&gt;
== Teorie ==&lt;br /&gt;
&lt;br /&gt;
Supraincarcarea metodelor claselor in general si a operatorilor in particular sunt doua dintre cele mai importante mecanisme ale limbajului C++. Ele sunt un pas urias catre polimorfism (asta este alta bazaconie inventata de oamenii cu creiere luminate). Aceste ''oportunitati''  sunt cele care ofera flexibilitate aplicatiilor pe care le construim.&lt;br /&gt;
&lt;br /&gt;
Iata lista operatorilor din C++ care se pot supraincarca:&lt;br /&gt;
* new delete&lt;br /&gt;
* () []&lt;br /&gt;
* + - * / %&lt;br /&gt;
* ^ &amp;amp; | ~&lt;br /&gt;
* ! = &amp;lt; &amp;gt;&lt;br /&gt;
* += -= *= /= %=&lt;br /&gt;
* ^= &amp;amp;= |=&lt;br /&gt;
* &amp;lt;&amp;lt; &amp;gt;&amp;gt;&lt;br /&gt;
* &amp;gt;&amp;gt;= &amp;lt;&amp;lt;=&lt;br /&gt;
* == != &amp;lt;= &amp;gt;=&lt;br /&gt;
* &amp;amp;&amp;amp; ||&lt;br /&gt;
* ++ --&lt;br /&gt;
* ,&lt;br /&gt;
* -&amp;gt;*&lt;br /&gt;
* -&amp;gt;&lt;br /&gt;
unde operatorul '''()''' este apelul unei functii, iar operatorul '''[]''' este operatorul de indexare.&lt;br /&gt;
&lt;br /&gt;
Urmatorii operatori nu se pot supraincarca:&lt;br /&gt;
* . .* :: ?: sizeof&lt;br /&gt;
&lt;br /&gt;
Reguli care trebuie sa fie respectate in supraincarcarea operatorilor:&lt;br /&gt;
* operatorii =, (), [], si -&amp;gt; trebuie sa fie membrii nestatici ai clasei&lt;br /&gt;
* operatorul = nu poate fi mostenit&lt;br /&gt;
* operatorii pentru tipurile predefinite ale limbajului nu se pot supraincarca&lt;br /&gt;
* operatorii nu pot avea argumente implicite&lt;br /&gt;
&lt;br /&gt;
Operatorii pentru un anumit tip definit de utilizator (clasa) pot sa fie sau nu membru al clasei. In cazul in care se supraincarca un operator pentru o clasa, dar acel operator nu apartine clasei, trebuie sa fie declarat '''friend''' in clasa respectiva si sa aiba cel putin un argument de tipul clasei respective. Exceptie de la aceasta regula fac operatorii '''= () [] -&amp;gt;''' care nu pot fi supraincarcati folosind functii de tipul friend ale unei anumite clase.&lt;br /&gt;
&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
&lt;br /&gt;
Un exemplu: voi da ca exemple supraincarcarea operatorilor ++ pre si post indexat.&lt;br /&gt;
 class MyPoint&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
    MyPoint(); // constructor implicit&lt;br /&gt;
    MyPoint( double a, double b ); // constructor de initializare&lt;br /&gt;
    MyPoint( MyPoint &amp;amp;r ); //constructor de copiere&lt;br /&gt;
 &lt;br /&gt;
    MyPoint operator+( MyPoint point ); //suma a 2 vectori&lt;br /&gt;
    MyPoint operator-( MyPoint point ); //diferenta a 2 vectori&lt;br /&gt;
    double operator*( MyPoint point ); //produsul scalar a 2 vectori&lt;br /&gt;
    MyPoint&amp;amp; operator*( double dVal ); //multiplicare cu o constanta&lt;br /&gt;
 &lt;br /&gt;
    MyPoint&amp;amp; operator=( MyPoint &amp;amp;point );&lt;br /&gt;
    MyPoint&amp;amp; operator=( double a, double b );&lt;br /&gt;
 &lt;br /&gt;
    MyPoint operator++(); // ++ prefixat&lt;br /&gt;
    MyPoint operator++( int a ); /* ++postfixat - de retinut ca a va avea INTOTDEAUNA valoarea 0 (zero) */&lt;br /&gt;
 &lt;br /&gt;
    friend ostream&amp;amp; operator&amp;lt;&amp;lt;( ostream &amp;amp;stream, const MyPoint &amp;amp;pt );&lt;br /&gt;
    friend istream&amp;amp; operator&amp;gt;&amp;gt;( istream &amp;amp;stream, const MyPoint &amp;amp;pt );&lt;br /&gt;
 &lt;br /&gt;
    int getX();&lt;br /&gt;
    int getY();&lt;br /&gt;
 &lt;br /&gt;
 private:&lt;br /&gt;
    double x;&lt;br /&gt;
    double y;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 MyPoint::MyPoint()&lt;br /&gt;
 {&lt;br /&gt;
    x = 0;&lt;br /&gt;
    y = 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint::MyPoint( MyPoint &amp;amp;r )&lt;br /&gt;
 {&lt;br /&gt;
    x = r.x;&lt;br /&gt;
    y = r.y;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint::MyPoint( double a, double b )&lt;br /&gt;
 {&lt;br /&gt;
    x = a;&lt;br /&gt;
    y = b;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint MyPoint::operator+( MyPoint point )&lt;br /&gt;
 {&lt;br /&gt;
    MyPoint temp;&lt;br /&gt;
    temp.x = x + point.x;&lt;br /&gt;
    temp.y = y + point.y;&lt;br /&gt;
    return temp;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint MyPoint::operator-( MyPoint point )&lt;br /&gt;
 {&lt;br /&gt;
    MyPoint temp;&lt;br /&gt;
    temp.x = x - point.x;&lt;br /&gt;
    temp.y = y - point.y;&lt;br /&gt;
    return temp;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 double MyPoint::operator*( MyPoint point )&lt;br /&gt;
 {&lt;br /&gt;
    return x * point.y + y * point.x;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint&amp;amp; MyPoint::operator*( double dVal )&lt;br /&gt;
 {&lt;br /&gt;
    x *= dVal;&lt;br /&gt;
    y *= dVal;&lt;br /&gt;
    return *this;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint&amp;amp; MyPoint::operator=( MyPoint &amp;amp;point )&lt;br /&gt;
 {&lt;br /&gt;
    x = point.x;&lt;br /&gt;
    y = point.y;&lt;br /&gt;
    return *this;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint&amp;amp; MyPoint::operator=( double a, double b )&lt;br /&gt;
 {&lt;br /&gt;
    x = a;&lt;br /&gt;
    y = b;&lt;br /&gt;
    return *this;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint MyPoint::operator++()&lt;br /&gt;
 {&lt;br /&gt;
    x++;&lt;br /&gt;
    y++;&lt;br /&gt;
    return *this;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint MyPoint::operator++( int a )&lt;br /&gt;
 {&lt;br /&gt;
    ++x;&lt;br /&gt;
    ++y;&lt;br /&gt;
    return *this;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 ostream&amp;amp; operator&amp;lt;&amp;lt;( ostream &amp;amp;stream, const MyPoint &amp;amp;pt )&lt;br /&gt;
 {&lt;br /&gt;
    stream &amp;lt;&amp;lt; &amp;quot;( &amp;quot; &amp;lt;&amp;lt; pt.x &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; pt.y &amp;lt;&amp;lt; &amp;quot; )\n&amp;quot;;&lt;br /&gt;
    return stream; &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 istream&amp;amp; operator&amp;gt;&amp;gt;( istream &amp;amp;stream, const MyPoint &amp;amp;pt )&lt;br /&gt;
 {&lt;br /&gt;
    stream &amp;gt;&amp;gt; pt.x &amp;gt;&amp;gt; pt.y;&lt;br /&gt;
    return stream;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int MyPoint::getX()&lt;br /&gt;
 {&lt;br /&gt;
    return x;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int MyPoint::getY()&lt;br /&gt;
 {&lt;br /&gt;
    return y;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main( int argc, char *argv[] ) &lt;br /&gt;
 {&lt;br /&gt;
    MyPoint pt( 5, 7 );&lt;br /&gt;
    cout &amp;lt;&amp;lt; pt &amp;lt;&amp;lt; endl; //afiseaza la consola ( 5, 7 )&lt;br /&gt;
    cout &amp;lt;&amp;lt; pt++ &amp;lt;&amp;lt; endl; //afiseaza la consola ( 5, 7 )&lt;br /&gt;
    cout &amp;lt;&amp;lt; pt &amp;lt;&amp;lt; endl; //afiseaza la consola ( 6, 8 )&lt;br /&gt;
    cout &amp;lt;&amp;lt; ++pt &amp;lt;&amp;lt; endl; //afiseaza la consola ( 7, 9 )&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Versiunea originală de [[User:Radubolovan|Radu Bolovan]] 12:04, 22 November 2005 (EET)&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Main_Page&amp;diff=1364</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Main_Page&amp;diff=1364"/>
				<updated>2005-11-22T10:18:28Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A început migrarea tutorialelor şi ghidurilor (HowTo) din forum în Wiki -- nu ezitaţi să daţi o mână de ajutor ;-)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ultimele 5 [[:Category:HowTo|ghiduri]] actualizate:&lt;br /&gt;
** [[Instalare Qemu|Instalarea emulatorului Qemu]] (maşini virtuale)&lt;br /&gt;
** [[ATi video (2.6)|Placă video ATi pe nucleu 2.6]] (drivere)&lt;br /&gt;
** [[MRTG cu IPFM|MRTG cu IPFM]] (grafice)&lt;br /&gt;
** [[Quagga on Linux|Quagga]] (rutare)&lt;br /&gt;
* Ultimele 5 [[:Category:Tutorial|tutoriale]] actualizate:&lt;br /&gt;
** [[Iptables romana|iptables]] (filtrare trafic)&lt;br /&gt;
** [http://wiki.linux360.ro/index.php?title=Supraincarcarea_operatorilor_in_limbajul_C Supraincarcarea operatorilor in limbajul C++]&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Main_Page&amp;diff=1363</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Main_Page&amp;diff=1363"/>
				<updated>2005-11-22T10:18:16Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A început migrarea tutorialelor şi ghidurilor (HowTo) din forum în Wiki -- nu ezitaţi să daţi o mână de ajutor ;-)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Ultimele 5 [[:Category:HowTo|ghiduri]] actualizate:&lt;br /&gt;
** [[Instalare Qemu|Instalarea emulatorului Qemu]] (maşini virtuale)&lt;br /&gt;
** [[ATi video (2.6)|Placă video ATi pe nucleu 2.6]] (drivere)&lt;br /&gt;
** [[MRTG cu IPFM|MRTG cu IPFM]] (grafice)&lt;br /&gt;
** [[Quagga on Linux|Quagga]] (rutare)&lt;br /&gt;
* Ultimele 5 [[:Category:Tutorial|tutoriale]] actualizate:&lt;br /&gt;
** [[Iptables romana|iptables]] (filtrare trafic)&lt;br /&gt;
[http://wiki.linux360.ro/index.php?title=Supraincarcarea_operatorilor_in_limbajul_C Supraincarcarea operatorilor in limbajul C++]&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Supra%C3%83%C2%AEnc%C3%84%C6%92rcarea_operatorilor_%C3%83%C2%AEn_limbajul_C-plus-plus&amp;diff=1362</id>
		<title>SupraÃ®ncÄƒrcarea operatorilor Ã®n limbajul C-plus-plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Supra%C3%83%C2%AEnc%C3%84%C6%92rcarea_operatorilor_%C3%83%C2%AEn_limbajul_C-plus-plus&amp;diff=1362"/>
				<updated>2005-11-22T10:15:54Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Operatiile de baza sunt implementate in limbajul C++ cu ajutorul operatorilor. In limbajul C++ operatorii sunt, de fapt, functii. Operatorii oferiti de limbaj pot “lucra” decat asupra tipurilor de date predefinite. Pentru a folosi operatorii asupra tipurilor de date construite de noi, limbajul C++ ne ofera un mecanism care se numeste '''supraincarcarea operatorilor'''.&lt;br /&gt;
&lt;br /&gt;
De ce am avea nevoie de asa ceva? Dupa cum se stie se poate crea o functie a unei clase care sa faca exact ce ar face un operator si care sa o definim (de exemplu) '''suma'''. Atunci am apela acea metoda astfel :&lt;br /&gt;
&lt;br /&gt;
 Obiect ob1;&lt;br /&gt;
 Obiect ob2;&lt;br /&gt;
 Obiect ob3 = ob1.suma( ob2 );&lt;br /&gt;
&lt;br /&gt;
Cam greoi! Nu ar fi mai simplu daca am scie&lt;br /&gt;
 Obiect ob3 = ob1 + ob2;&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
Astfel s-a ajuns la nevoia de a supraincarcarea operatorii!&lt;br /&gt;
&lt;br /&gt;
Supraincarcarea metodelor claselor in general si a operatorilor in particular sunt doua dintre cele mai importante mecanisme ale limbajului C++. Ele sunt un pas urias catre polimorfism (asta este alta bazaconie inventata de oamenii cu creiere luminate). Aceste “oportunitati”  sunte cele care ofera flexibilitate aplicatiilor pe care le construim.&lt;br /&gt;
Iata lista operatorilor din C++ care se pot supraincarca:&lt;br /&gt;
 new delete&lt;br /&gt;
 () []&lt;br /&gt;
 + - * / %&lt;br /&gt;
 ^ &amp;amp; | ~&lt;br /&gt;
 ! = &amp;lt; &amp;gt;&lt;br /&gt;
 += -= *= /= %=&lt;br /&gt;
 ^= &amp;amp;= |=&lt;br /&gt;
 &amp;lt;&amp;lt; &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;= &amp;lt;&amp;lt;=&lt;br /&gt;
 == != &amp;lt;= &amp;gt;=&lt;br /&gt;
 &amp;amp;&amp;amp; ||&lt;br /&gt;
 ++ --&lt;br /&gt;
 ,&lt;br /&gt;
 -&amp;gt;*&lt;br /&gt;
 -&amp;gt;&lt;br /&gt;
Operatorul '''()''' este apelul unei functii, iar operatorul '''[]''' este operatorul de indexare.&lt;br /&gt;
&lt;br /&gt;
Urmatorii operatori nu se pot supraincarca:&lt;br /&gt;
 . .* :: ?: sizeof&lt;br /&gt;
Reguli care trebuie sa fie respectate in supraincarcarea operatorilor:&lt;br /&gt;
 – Operatorii =, (), [], si -&amp;gt; trebuie sa fie membrii nestatici ai clasei&lt;br /&gt;
 - Operatorul = nu poate fi mostenit&lt;br /&gt;
 - Operatorii pentru tipurile predefinite ale limbajului nu se pot supraincarca&lt;br /&gt;
 - Operatorii nu pot avea argumente implicite&lt;br /&gt;
Operatorii pentru un anumit tip definit de utilizator (clasa) pot sa fie sau nu membru al clasei. In cazul in care se supraincarca un operator pentru o clasa, dar acel operator nu apartine clasei, trebuie sa fie declarat '''friend''' in clasa respectiva si sa aiba cel putin un argument de tipul clasei respective. Exceptie de la aceasta regula fac operatorii '''= () [] -&amp;gt;''' care nu pot fi supraincarcati folosind functii de tipul friend ale unei anumite clase.&lt;br /&gt;
&lt;br /&gt;
Un exemplu: voi da ca exemple supraincarcarea operatorilor ++ pre si post indexat.&lt;br /&gt;
 class MyPoint&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
    MyPoint(); // constructor implicit&lt;br /&gt;
    MyPoint( double a, double b ); // constructor de initializare&lt;br /&gt;
    MyPoint( MyPoint &amp;amp;r ); //constructor de copiere&lt;br /&gt;
 &lt;br /&gt;
    MyPoint operator+( MyPoint point ); //suma a 2 vectori&lt;br /&gt;
    MyPoint operator-( MyPoint point ); //diferenta a 2 vectori&lt;br /&gt;
    double operator*( MyPoint point ); //produsul scalar a 2 vectori&lt;br /&gt;
    MyPoint&amp;amp; operator*( double dVal ); //multiplicare cu o constanta&lt;br /&gt;
 &lt;br /&gt;
    MyPoint&amp;amp; operator=( MyPoint &amp;amp;point );&lt;br /&gt;
    MyPoint&amp;amp; operator=( double a, double b );&lt;br /&gt;
 &lt;br /&gt;
    MyPoint operator++(); // ++ prefixat&lt;br /&gt;
    MyPoint operator++( int a ); /* ++postfixat - de retinut ca a va avea INTOTDEAUNA valoarea 0 (zero) */&lt;br /&gt;
 &lt;br /&gt;
    // added by '''andreich''' &amp;amp;&amp;amp; modified by '''radubolovan''' start&lt;br /&gt;
    friend ostream&amp;amp; operator&amp;lt;&amp;lt;( ostream &amp;amp;stream, const MyPoint &amp;amp;pt );&lt;br /&gt;
    friend istream&amp;amp; operator&amp;gt;&amp;gt;( istream &amp;amp;stream, const MyPoint &amp;amp;pt );&lt;br /&gt;
    // added by '''andreich''' &amp;amp;&amp;amp; modified by '''radubolovan''' end&lt;br /&gt;
 &lt;br /&gt;
    int getX();&lt;br /&gt;
    int getY();&lt;br /&gt;
 &lt;br /&gt;
 private:&lt;br /&gt;
    double x;&lt;br /&gt;
    double y;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 MyPoint::MyPoint()&lt;br /&gt;
 {&lt;br /&gt;
    x = 0;&lt;br /&gt;
    y = 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint::MyPoint( MyPoint &amp;amp;r )&lt;br /&gt;
 {&lt;br /&gt;
    x = r.x;&lt;br /&gt;
    y = r.y;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint::MyPoint( double a, double b )&lt;br /&gt;
 {&lt;br /&gt;
    x = a;&lt;br /&gt;
    y = b;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint MyPoint::operator+( MyPoint point )&lt;br /&gt;
 {&lt;br /&gt;
    MyPoint temp;&lt;br /&gt;
    temp.x = x + point.x;&lt;br /&gt;
    temp.y = y + point.y;&lt;br /&gt;
    return temp;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint MyPoint::operator-( MyPoint point )&lt;br /&gt;
 {&lt;br /&gt;
    MyPoint temp;&lt;br /&gt;
    temp.x = x - point.x;&lt;br /&gt;
    temp.y = y - point.y;&lt;br /&gt;
    return temp;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 double MyPoint::operator*( MyPoint point )&lt;br /&gt;
 {&lt;br /&gt;
    return x * point.y + y * point.x;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint&amp;amp; MyPoint::operator*( double dVal )&lt;br /&gt;
 {&lt;br /&gt;
    x *= dVal;&lt;br /&gt;
    y *= dVal;&lt;br /&gt;
    return *this;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint&amp;amp; MyPoint::operator=( MyPoint &amp;amp;point )&lt;br /&gt;
 {&lt;br /&gt;
    x = point.x;&lt;br /&gt;
    y = point.y;&lt;br /&gt;
    return *this;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint&amp;amp; MyPoint::operator=( double a, double b )&lt;br /&gt;
 {&lt;br /&gt;
    x = a;&lt;br /&gt;
    y = b;&lt;br /&gt;
    return *this;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint MyPoint::operator++()&lt;br /&gt;
 {&lt;br /&gt;
    x++;&lt;br /&gt;
    y++;&lt;br /&gt;
    return *this;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint MyPoint::operator++( int a )&lt;br /&gt;
 {&lt;br /&gt;
    ++x;&lt;br /&gt;
    ++y;&lt;br /&gt;
    return *this;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // added by '''andreich''' &amp;amp;&amp;amp; modified by '''radubolovan''' start&lt;br /&gt;
 ostream&amp;amp; operator&amp;lt;&amp;lt;( ostream &amp;amp;stream, const MyPoint &amp;amp;pt )&lt;br /&gt;
 {&lt;br /&gt;
    stream &amp;lt;&amp;lt; &amp;quot;( &amp;quot; &amp;lt;&amp;lt; pt.x &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; pt.y &amp;lt;&amp;lt; &amp;quot; )\n&amp;quot;;&lt;br /&gt;
    return stream; &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 istream&amp;amp; operator&amp;gt;&amp;gt;( istream &amp;amp;stream, const MyPoint &amp;amp;pt )&lt;br /&gt;
 {&lt;br /&gt;
    stream &amp;gt;&amp;gt; pt.x &amp;gt;&amp;gt; pt.y;&lt;br /&gt;
    return stream;&lt;br /&gt;
 }&lt;br /&gt;
 // added by '''andreich''' &amp;amp;&amp;amp; modified by '''radubolovan''' end&lt;br /&gt;
 &lt;br /&gt;
 int MyPoint::getX()&lt;br /&gt;
 {&lt;br /&gt;
    return x;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int MyPoint::getY()&lt;br /&gt;
 {&lt;br /&gt;
    return y;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main( int argc, char *argv[] ) &lt;br /&gt;
 {&lt;br /&gt;
    MyPoint pt( 5, 7 );&lt;br /&gt;
    cout &amp;lt;&amp;lt; pt &amp;lt;&amp;lt; endl; //afiseaza la consola ( 5, 7 )&lt;br /&gt;
    cout &amp;lt;&amp;lt; pt++ &amp;lt;&amp;lt; endl; //afiseaza la consola ( 5, 7 )&lt;br /&gt;
    cout &amp;lt;&amp;lt; pt &amp;lt;&amp;lt; endl; //afiseaza la consola ( 6, 8 )&lt;br /&gt;
    cout &amp;lt;&amp;lt; ++pt &amp;lt;&amp;lt; endl; //afiseaza la consola ( 7, 9 )&lt;br /&gt;
 }&lt;br /&gt;
--[[User:Radubolovan|Radu Bolovan]] 12:04, 22 November 2005 (EET)&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Supra%C3%83%C2%AEnc%C3%84%C6%92rcarea_operatorilor_%C3%83%C2%AEn_limbajul_C-plus-plus&amp;diff=1361</id>
		<title>SupraÃ®ncÄƒrcarea operatorilor Ã®n limbajul C-plus-plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Supra%C3%83%C2%AEnc%C3%84%C6%92rcarea_operatorilor_%C3%83%C2%AEn_limbajul_C-plus-plus&amp;diff=1361"/>
				<updated>2005-11-22T10:11:38Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Operatiile de baza sunt implementate in limbajul C++ cu ajutorul operatorilor. In limbajul C++ operatorii sunt, de fapt, functii. Operatorii oferiti de limbaj pot “lucra” decat asupra tipurilor de date predefinite. Pentru a folosi operatorii asupra tipurilor de date construite de noi, limbajul C++ ne ofera un mecanism care se numeste '''supraincarcarea operatorilor'''.&lt;br /&gt;
&lt;br /&gt;
De ce am avea nevoie de asa ceva? Dupa cum se stie se poate crea o functie a unei clase care sa faca exact ce ar face un operator si care sa o definim (de exemplu) '''suma'''. Atunci am apela acea metoda astfel :&lt;br /&gt;
&lt;br /&gt;
 Obiect ob1;&lt;br /&gt;
 Obiect ob2;&lt;br /&gt;
 Obiect ob3 = ob1.suma( ob2 );&lt;br /&gt;
&lt;br /&gt;
Cam greoi! Nu ar fi mai simplu daca am scie&lt;br /&gt;
 Obiect ob3 = ob1 + ob2;&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
Astfel s-a ajuns la nevoia de a supraincarcarea operatorii!&lt;br /&gt;
&lt;br /&gt;
Supraincarcarea metodelor claselor in general si a operatorilor in particular sunt doua dintre cele mai importante mecanisme ale limbajului C++. Ele sunt un pas urias catre polimorfism (asta este alta bazaconie inventata de oamenii cu creiere luminate). Aceste “oportunitati”  sunte cele care ofera flexibilitate aplicatiilor pe care le construim.&lt;br /&gt;
Iata lista operatorilor din C++ care se pot supraincarca:&lt;br /&gt;
 new delete&lt;br /&gt;
 () []&lt;br /&gt;
 + - * / %&lt;br /&gt;
 ^ &amp;amp; | ~&lt;br /&gt;
 ! = &amp;lt; &amp;gt;&lt;br /&gt;
 += -= *= /= %=&lt;br /&gt;
 ^= &amp;amp;= |=&lt;br /&gt;
 &amp;lt;&amp;lt; &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;= &amp;lt;&amp;lt;=&lt;br /&gt;
 == != &amp;lt;= &amp;gt;=&lt;br /&gt;
 &amp;amp;&amp;amp; ||&lt;br /&gt;
 ++ --&lt;br /&gt;
 ,&lt;br /&gt;
 -&amp;gt;*&lt;br /&gt;
 -&amp;gt;&lt;br /&gt;
Operatorul '''()''' este apelul unei functii, iar operatorul '''[]''' este operatorul de indexare.&lt;br /&gt;
&lt;br /&gt;
Urmatorii operatori nu se pot supraincarca:&lt;br /&gt;
 . .* :: ?: sizeof&lt;br /&gt;
Reguli care trebuie sa fie respectate in supraincarcarea operatorilor:&lt;br /&gt;
 – Operatorii =, (), [], si -&amp;gt; trebuie sa fie membrii nestatici ai clasei&lt;br /&gt;
 - Operatorul = nu poate fi mostenit&lt;br /&gt;
 - Operatorii pentru tipurile predefinite ale limbajului nu se pot supraincarca&lt;br /&gt;
 - Operatorii nu pot avea argumente implicite&lt;br /&gt;
Operatorii pentru un anumit tip definit de utilizator (clasa) pot sa fie sau nu membru al clasei. In cazul in care se supraincarca un operator pentru o clasa, dar acel operator nu apartine clasei, trebuie sa fie declarat '''friend''' in clasa respectiva si sa aiba cel putin un argument de tipul clasei respective. Exceptie de la aceasta regula fac operatorii '''= () [] -&amp;gt;''' care nu pot fi supraincarcati folosind functii de tipul friend ale unei anumite clase.&lt;br /&gt;
&lt;br /&gt;
Un exemplu: voi da ca exemple supraincarcarea operatorilor ++ pre si post indexat.&lt;br /&gt;
 class MyPoint&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
    MyPoint(); // constructor implicit&lt;br /&gt;
    MyPoint( double a, double b ); // constructor de initializare&lt;br /&gt;
    MyPoint( MyPoint &amp;amp;r ); //constructor de copiere&lt;br /&gt;
 &lt;br /&gt;
    MyPoint operator+( MyPoint point ); //suma a 2 vectori&lt;br /&gt;
    MyPoint operator-( MyPoint point ); //diferenta a 2 vectori&lt;br /&gt;
    double operator*( MyPoint point ); //produsul scalar a 2 vectori&lt;br /&gt;
    MyPoint&amp;amp; operator*( double dVal ); //multiplicare cu o constanta&lt;br /&gt;
 &lt;br /&gt;
    MyPoint&amp;amp; operator=( MyPoint &amp;amp;point );&lt;br /&gt;
    MyPoint&amp;amp; operator=( double a, double b );&lt;br /&gt;
 &lt;br /&gt;
    MyPoint operator++(); // ++ prefixat&lt;br /&gt;
    MyPoint operator++( int a ); /* ++postfixat - de retinut ca a va avea INTOTDEAUNA valoarea 0 (zero) */&lt;br /&gt;
 &lt;br /&gt;
    // added by andreich &amp;amp;&amp;amp; modified by radubolovan start&lt;br /&gt;
    friend ostream&amp;amp; operator&amp;lt;&amp;lt;( ostream &amp;amp;stream, const MyPoint &amp;amp;pt );&lt;br /&gt;
    friend istream&amp;amp; operator&amp;gt;&amp;gt;( istream &amp;amp;stream, const MyPoint &amp;amp;pt );&lt;br /&gt;
    // added by andreich &amp;amp;&amp;amp; modified by radubolovan end&lt;br /&gt;
 &lt;br /&gt;
    int getX();&lt;br /&gt;
    int getY();&lt;br /&gt;
 &lt;br /&gt;
 private:&lt;br /&gt;
    double x;&lt;br /&gt;
    double y;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 MyPoint::MyPoint()&lt;br /&gt;
 {&lt;br /&gt;
    x = 0;&lt;br /&gt;
    y = 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint::MyPoint( MyPoint &amp;amp;r )&lt;br /&gt;
 {&lt;br /&gt;
    x = r.x;&lt;br /&gt;
    y = r.y;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint::MyPoint( double a, double b )&lt;br /&gt;
 {&lt;br /&gt;
    x = a;&lt;br /&gt;
    y = b;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint MyPoint::operator+( MyPoint point )&lt;br /&gt;
 {&lt;br /&gt;
    MyPoint temp;&lt;br /&gt;
    temp.x = x + point.x;&lt;br /&gt;
    temp.y = y + point.y;&lt;br /&gt;
    return temp;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint MyPoint::operator-( MyPoint point )&lt;br /&gt;
 {&lt;br /&gt;
    MyPoint temp;&lt;br /&gt;
    temp.x = x - point.x;&lt;br /&gt;
    temp.y = y - point.y;&lt;br /&gt;
    return temp;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 double MyPoint::operator*( MyPoint point )&lt;br /&gt;
 {&lt;br /&gt;
    return x * point.y + y * point.x;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint&amp;amp; MyPoint::operator*( double dVal )&lt;br /&gt;
 {&lt;br /&gt;
    x *= dVal;&lt;br /&gt;
    y *= dVal;&lt;br /&gt;
    return *this;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint&amp;amp; MyPoint::operator=( MyPoint &amp;amp;point )&lt;br /&gt;
 {&lt;br /&gt;
    x = point.x;&lt;br /&gt;
    y = point.y;&lt;br /&gt;
    return *this;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint&amp;amp; MyPoint::operator=( double a, double b )&lt;br /&gt;
 {&lt;br /&gt;
    x = a;&lt;br /&gt;
    y = b;&lt;br /&gt;
    return *this;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint MyPoint::operator++()&lt;br /&gt;
 {&lt;br /&gt;
    x++;&lt;br /&gt;
    y++;&lt;br /&gt;
    return *this;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint MyPoint::operator++( int a )&lt;br /&gt;
 {&lt;br /&gt;
    ++x;&lt;br /&gt;
    ++y;&lt;br /&gt;
    return *this;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // added by andreich &amp;amp;&amp;amp; modified by radubolovan start&lt;br /&gt;
 ostream&amp;amp; operator&amp;lt;&amp;lt;( ostream &amp;amp;stream, const MyPoint &amp;amp;pt )&lt;br /&gt;
 {&lt;br /&gt;
    stream &amp;lt;&amp;lt; &amp;quot;( &amp;quot; &amp;lt;&amp;lt; pt.x &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; pt.y &amp;lt;&amp;lt; &amp;quot; )\n&amp;quot;;&lt;br /&gt;
    return stream; &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 istream&amp;amp; operator&amp;gt;&amp;gt;( istream &amp;amp;stream, const MyPoint &amp;amp;pt )&lt;br /&gt;
 {&lt;br /&gt;
    stream &amp;gt;&amp;gt; pt.x &amp;gt;&amp;gt; pt.y;&lt;br /&gt;
    return stream;&lt;br /&gt;
 }&lt;br /&gt;
 // added by andreich &amp;amp;&amp;amp; modified by radubolovan end&lt;br /&gt;
 &lt;br /&gt;
 int MyPoint::getX()&lt;br /&gt;
 {&lt;br /&gt;
    return x;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int MyPoint::getY()&lt;br /&gt;
 {&lt;br /&gt;
    return y;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main( int argc, char *argv[] ) &lt;br /&gt;
 {&lt;br /&gt;
    MyPoint pt( 5, 7 );&lt;br /&gt;
    cout &amp;lt;&amp;lt; pt &amp;lt;&amp;lt; endl; //afiseaza la consola ( 5, 7 )&lt;br /&gt;
    cout &amp;lt;&amp;lt; pt++ &amp;lt;&amp;lt; endl; //afiseaza la consola ( 5, 7 )&lt;br /&gt;
    cout &amp;lt;&amp;lt; pt &amp;lt;&amp;lt; endl; //afiseaza la consola ( 6, 8 )&lt;br /&gt;
    cout &amp;lt;&amp;lt; ++pt &amp;lt;&amp;lt; endl; //afiseaza la consola ( 7, 9 )&lt;br /&gt;
 }&lt;br /&gt;
--[[User:Radubolovan|Radu Bolovan]] 12:04, 22 November 2005 (EET)&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Supra%C3%83%C2%AEnc%C3%84%C6%92rcarea_operatorilor_%C3%83%C2%AEn_limbajul_C-plus-plus&amp;diff=1360</id>
		<title>SupraÃ®ncÄƒrcarea operatorilor Ã®n limbajul C-plus-plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Supra%C3%83%C2%AEnc%C3%84%C6%92rcarea_operatorilor_%C3%83%C2%AEn_limbajul_C-plus-plus&amp;diff=1360"/>
				<updated>2005-11-22T10:04:03Z</updated>
		
		<summary type="html">&lt;p&gt;Radubolovan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Operatiile de baza sunt implementate in limbajul C++ cu ajutorul operatorilor. In limbajul C++ operatorii sunt, de fapt, functii. Operatorii oferiti de limbaj pot “lucra” decat asupra tipurilor de date predefinite. Pentru a folosi operatorii asupra tipurilor de date construite de noi, limbajul C++ ne ofera un mecanism care se numeste '''supraincarcarea operatorilor'''.&lt;br /&gt;
&lt;br /&gt;
De ce am avea nevoie de asa ceva? Dupa cum se stie se poate crea o functie a unei clase care sa faca exact ce ar face un operator si care sa o definim (de exemplu) '''suma'''. Atunci am apela acea metoda astfel :&lt;br /&gt;
&lt;br /&gt;
 Obiect ob1;&lt;br /&gt;
 Obiect ob2;&lt;br /&gt;
 Obiect ob3 = ob1.suma( ob2 );&lt;br /&gt;
&lt;br /&gt;
Cam greoi! Nu ar fi mai simplu daca am scie&lt;br /&gt;
 Obiect ob3 = ob1 + ob2;&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
Astfel s-a ajuns la nevoia de a supraincarcarea operatorii!&lt;br /&gt;
&lt;br /&gt;
Supraincarcarea metodelor claselor in general si a operatorilor in particular sunt doua dintre cele mai importante mecanisme ale limbajului C++. Ele sunt un pas urias catre polimorfism (asta este alta bazaconie inventata de oamenii cu creiere luminate). Aceste “oportunitati”  sunte cele care ofera flexibilitate aplicatiilor pe care le construim.&lt;br /&gt;
Iata lista operatorilor din C++ care se pot supraincarca:&lt;br /&gt;
 new delete&lt;br /&gt;
 () []&lt;br /&gt;
 + - * / %&lt;br /&gt;
 ^ &amp;amp; | ~&lt;br /&gt;
 ! = &amp;lt; &amp;gt;&lt;br /&gt;
 += -= *= /= %=&lt;br /&gt;
 ^= &amp;amp;= |=&lt;br /&gt;
 &amp;lt;&amp;lt; &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;= &amp;lt;&amp;lt;=&lt;br /&gt;
 == != &amp;lt;= &amp;gt;=&lt;br /&gt;
 &amp;amp;&amp;amp; ||&lt;br /&gt;
 ++ --&lt;br /&gt;
 ,&lt;br /&gt;
 -&amp;gt;*&lt;br /&gt;
 -&amp;gt;&lt;br /&gt;
Operatorul '''()''' este apelul unei functii, iar operatorul '''[]''' este operatorul de indexare.&lt;br /&gt;
&lt;br /&gt;
Urmatorii operatori nu se pot supraincarca:&lt;br /&gt;
 . .* :: ?: sizeof&lt;br /&gt;
Reguli care trebuie sa fie respectate in supraincarcarea operatorilor:&lt;br /&gt;
 – Operatorii =, (), [], si -&amp;gt; trebuie sa fie membrii nestatici ai clasei&lt;br /&gt;
 - Operatorul = nu poate fi mostenit&lt;br /&gt;
 - Operatorii pentru tipurile predefinite ale limbajului nu se pot supraincarca&lt;br /&gt;
 - Operatorii nu pot avea argumente implicite&lt;br /&gt;
Operatorii pentru un anumit tip definit de utilizator (clasa) pot sa fie sau nu membru al clasei. In cazul in care se supraincarca un operator pentru o clasa, dar acel operator nu apartine clasei, trebuie sa fie declarat '''friend''' in clasa respectiva si sa aiba cel putin un argument de tipul clasei respective. Exceptie de la aceasta regula fac operatorii '''= () [] -&amp;gt;''' care nu pot fi supraincarcati folosind functii de tipul friend ale unei anumite clase.&lt;br /&gt;
&lt;br /&gt;
Un exemplu: voi da ca exemple supraincarcarea operatorilor ++ pre si post indexat.&lt;br /&gt;
 class MyPoint&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
    MyPoint(); // constructor implicit&lt;br /&gt;
    MyPoint( double a, double b ); // constructor de initializare&lt;br /&gt;
    MyPoint( MyPoint &amp;amp;r ); //constructor de copiere&lt;br /&gt;
 &lt;br /&gt;
    MyPoint operator+( MyPoint point ); //suma a 2 vectori&lt;br /&gt;
    MyPoint operator-( MyPoint point ); //diferenta a 2 vectori&lt;br /&gt;
    double operator*( MyPoint point ); //produsul scalar a 2 vectori&lt;br /&gt;
    MyPoint&amp;amp; operator*( double dVal ); //multiplicare cu o constanta&lt;br /&gt;
 &lt;br /&gt;
    MyPoint&amp;amp; operator=( MyPoint &amp;amp;point );&lt;br /&gt;
    MyPoint&amp;amp; operator=( double a, double b );&lt;br /&gt;
 &lt;br /&gt;
    MyPoint operator++(); // ++ prefixat&lt;br /&gt;
    MyPoint operator++( int a ); /* ++postfixat - de retinut ca a va avea INTOTDEAUNA valoarea 0 (zero) */&lt;br /&gt;
 &lt;br /&gt;
    // added by andreich &amp;amp;&amp;amp; modified by radubolovan start&lt;br /&gt;
    friend ostream&amp;amp; operator&amp;lt;&amp;lt;( ostream &amp;amp;stream, const MyPoint &amp;amp;pt );&lt;br /&gt;
    friend istream&amp;amp; operator&amp;gt;&amp;gt;( istream &amp;amp;stream, const MyPoint &amp;amp;pt );&lt;br /&gt;
    // added by andreich &amp;amp;&amp;amp; modified by radubolovan end&lt;br /&gt;
 &lt;br /&gt;
    int getX();&lt;br /&gt;
    int getY();&lt;br /&gt;
 &lt;br /&gt;
 private:&lt;br /&gt;
    double x;&lt;br /&gt;
    double y;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 MyPoint::MyPoint()&lt;br /&gt;
 {&lt;br /&gt;
    x = 0;&lt;br /&gt;
    y = 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint::MyPoint( MyPoint &amp;amp;r )&lt;br /&gt;
 {&lt;br /&gt;
    x = r.x;&lt;br /&gt;
    y = r.y;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint::MyPoint( double a, double b )&lt;br /&gt;
 {&lt;br /&gt;
    x = a;&lt;br /&gt;
    y = b;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint MyPoint::operator+( MyPoint point )&lt;br /&gt;
 {&lt;br /&gt;
    MyPoint temp;&lt;br /&gt;
    temp.x = x + point.x;&lt;br /&gt;
    temp.y = y + point.y;&lt;br /&gt;
    return temp;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint MyPoint::operator-( MyPoint point )&lt;br /&gt;
 {&lt;br /&gt;
    MyPoint temp;&lt;br /&gt;
    temp.x = x - point.x;&lt;br /&gt;
    temp.y = y - point.y;&lt;br /&gt;
    return temp;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 double MyPoint::operator*( MyPoint point )&lt;br /&gt;
 {&lt;br /&gt;
    return x * point.y + y * point.x;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint&amp;amp; MyPoint::operator*( double dVal )&lt;br /&gt;
 {&lt;br /&gt;
    x *= dVal;&lt;br /&gt;
    y *= dVal;&lt;br /&gt;
    return *this;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint&amp;amp; MyPoint::operator=( MyPoint &amp;amp;point )&lt;br /&gt;
 {&lt;br /&gt;
    x = point.x;&lt;br /&gt;
    y = point.y;&lt;br /&gt;
    return *this;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint&amp;amp; MyPoint::operator=( double a, double b )&lt;br /&gt;
 {&lt;br /&gt;
    x = a;&lt;br /&gt;
    y = b;&lt;br /&gt;
    return *this;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint MyPoint::operator++()&lt;br /&gt;
 {&lt;br /&gt;
    x++;&lt;br /&gt;
    y++;&lt;br /&gt;
    return *this;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 MyPoint MyPoint::operator++( int a )&lt;br /&gt;
 {&lt;br /&gt;
    ++x;&lt;br /&gt;
    ++y;&lt;br /&gt;
    return *this;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // added by andreich &amp;amp;&amp;amp; modified by radubolovan start&lt;br /&gt;
 ostream&amp;amp; operator&amp;lt;&amp;lt;( ostream &amp;amp;stream, const MyPoint &amp;amp;pt )&lt;br /&gt;
 {&lt;br /&gt;
    stream &amp;lt;&amp;lt; &amp;quot;( &amp;quot; &amp;lt;&amp;lt; pt.x &amp;lt;&amp;lt; &amp;quot;, &amp;quot; &amp;lt;&amp;lt; pt.y &amp;lt;&amp;lt; &amp;quot; )\n&amp;quot;;&lt;br /&gt;
    return stream; &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 istream&amp;amp; operator&amp;gt;&amp;gt;( istream &amp;amp;stream, const MyPoint &amp;amp;pt )&lt;br /&gt;
 {&lt;br /&gt;
    stream &amp;gt;&amp;gt; pt.x &amp;gt;&amp;gt; pt.y;&lt;br /&gt;
    return stream;&lt;br /&gt;
 }&lt;br /&gt;
 // added by andreich &amp;amp;&amp;amp; modified by radubolovan end&lt;br /&gt;
 &lt;br /&gt;
 int MyPoint::getX()&lt;br /&gt;
 {&lt;br /&gt;
    return x;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int MyPoint::getY()&lt;br /&gt;
 {&lt;br /&gt;
    return y;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main( int argc, char *argv[] ) &lt;br /&gt;
 {&lt;br /&gt;
    MyPoint pt( 5, 7 );&lt;br /&gt;
    cout &amp;lt;&amp;lt; pt &amp;lt;&amp;lt; endl; //afiseaza la consola ( 5, 7 )&lt;br /&gt;
    cout &amp;lt;&amp;lt; pt++ &amp;lt;&amp;lt; endl; //afiseaza la consola ( 5, 7 )&lt;br /&gt;
    cout &amp;lt;&amp;lt; pt &amp;lt;&amp;lt; endl; //afiseaza la consola ( 6, 8 )&lt;br /&gt;
    cout &amp;lt;&amp;lt; ++pt &amp;lt;&amp;lt; endl; //afiseaza la consola ( 7, 9 )&lt;br /&gt;
 }&lt;br /&gt;
--[[User:Radubolovan|radubolovan]] 12:04, 22 November 2005 (EET)&lt;/div&gt;</summary>
		<author><name>Radubolovan</name></author>	</entry>

	</feed>