C++ Kurs

Wenn fertig, bitte Fenster schließen

Lösung zur Lektion "Statische Member"


// Lösung zu statischen Member

// Dateien einbinden

#include <iostream>

using std::cout;
using std::endl;

// Klassendefinition
class Com
{
   bool hasCom;            // COM-Objekt besitzt Schnittstelle
   static bool comLocked;  // statische Verriegelung der Schnittstelle
 public:
   Com();                  // ctor
   ~Com();                 // dtor
   bool WriteCom(const char *const pszT);  // Ausgabe, belegt Schnittstelle
   void ReleaseCom();      // Schnittstelle freigeben
};
// Statische Eigenschaft definieren und initialisieren
bool Com::comLocked = false;
// Definition der Memberfunktionen
// Konstruktor

Com::Com()
{
   // Objekt besitzt Schnittstelle noch nicht
   hasCom = false;
}
// Destruktor
Com::~Com()
{
   // Falls Objekt Schnittstelle besitzt, diese wieder freigeben
   if (hasCom)
      comLocked = false;
}
// Auf Schnittstelle schreiben
bool Com::WriteCom(const char *const pszT)
{
   // Wenn Objekt Schnittstelle besitzt, dann schreiben
   if (hasCom)
      cout << pszT << endl;
   else
   {
      // Falls Schnittstelle nicht belegt ist
      if (!comLocked)
      {
         // Schnittstelle belegen und Objekt besitzt jetzt Schnittstelle
         comLocked = true;
         hasCom = true;
         // Auf Schnittstelle schreiben
         cout << pszT << endl;
      }
      else
      {
         // Anderes Objekt besitzt Schnittstelle
         cout << "FEHLER: COM-Port belegt!\n";
         return false;
      }
   }
   return true;
}
// Schnittstelle freigeben
void Com::ReleaseCom()
{
   // Falls Objekt die Schnittstelle besitzt
   if (hasCom)
   {
      // Schnittstelle freigeben
      hasCom = false;
      comLocked = false;
   }
}

// 2 COM-Objekte erstellen
Com ComA;
Com ComB;

// main() Funktion
int main()
{
   // 1. COM-Objekt schreibt auf Schnittstelle
   ComA.WriteCom("1. Schreiben von Objekt A");
   ComA.WriteCom("2. Schreiben von Objekt A");
   // 2. COM-Objekt versucht nun auf Schnittstelle zu schreiben
   ComB.WriteCom("1. Schreiben von Objekt B");
   // 1. COM-Objekt gibt Schnittstelle wieder frei
   cout << "Objekt A gibt COM wieder frei\n";
   ComA.ReleaseCom();
   // 2. COM-Objekt kann jetzt auf Schnittstelle schreiben
   ComB.WriteCom("2. Schreiben von Objekt B");
   ComB.WriteCom("3. Schreiben von Objekt B");
}