<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Vererbung und die Anzeige der Daten im Debug-Inspektor]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem. Zuerst etwas Erklärung und Code. Ich habe zwei Klassen, die eine TSerialCom die den Zugriff auf die seriellen Schnittstellen ermöglicht:<br />
Die .h dazu:</p>
<pre><code class="language-cpp">class TSerialCom
{
  public:
    DWord      ComWrite  (char* buffer,
                          int   BytesToSend);
    DWord      ComRead   (char* buffer,
                          int   BytesToRead);
    int        ComOpen   (int   CPort,
                          int   Bd,
                          int   DataB,
                          int   Par,
                          int   StopB);
    void       ComClose  (void);

    __fastcall TSerialCom(void);
    __fastcall ~TSerialCom(void);

  private:
    HANDLE              hComm[10];
    COMMTIMEOUTS        ctmoNew;
    COMMTIMEOUTS        ctmoOld;

    int                 ComPort,
                        Baudrate,
                        DataBits,
                        Parity,
                        StopBits;

};
</code></pre>
<p>Jetzt gibt es eine zweite Klasse USS die die Funktionalität eines bestimmten Übertragungprotokolls ermöglicht. Da diese die Funktionen von TSerialCom braucht:</p>
<p>uss.h:</p>
<pre><code class="language-cpp">class USS : public TSerialCom
{
  private:
      int	         ussTyp;
      TSerialCom  *Port;
      struct      NettoData
        {
        unsigned __int16 Lge,  Adr,  Ak,   Pnu,  Ind,  Pwe[PWE_VAR],
	                Pzd1, Pzd2, Pzd3, Pzd4, Pzd5, Pzd6;
        };

  public:
      USS (int Com, int Baud, int Data, int Parity, int Stop);
      ~USS();											
      void      Xmit    (void);
      void      Init    (void);

      NettoData         Tx,
                        Rx;
      int               UssErrorCode;
      AnsiString        UssErrorStr;

};
</code></pre>
<p>Der Konstruktor von USS:</p>
<pre><code class="language-cpp">USS::USS (int Com, int Baud, int Data, int Parity, int Stop)
{
  Port = new TSerialCom();
  ussTyp = USS2; //Voreinstellung 4/6 Worte
  Port-&gt;ComOpen(Com, Baud, Data, Parity, Stop);
  Init();
  UssErrorCode = 0;
  UssErrorStr = &quot;&quot;;

}
</code></pre>
<p>Der Destruktor von USS:</p>
<pre><code class="language-cpp">USS::~USS()
{
  Port-&gt;ComClose();
  delete Port;
}
</code></pre>
<p>Und jetzt der eigentliche Aufruf, aufs Wesentliche reduziert:</p>
<pre><code class="language-cpp">USS *C1 = new USS(COM1, 9600, 8, EVEN, 1);
C1-&gt;Xmit();
delete C1;
</code></pre>
<p>Funktionieren tut eigentlich alles. Mit dem Erzeugen des Objektes C1 wird die Schnittstelle korrekt geöffnet, die Daten können übertragen werden, mit dem delete wird die Schnittstelle geschlossen. Funktionell also alles ok.<br />
Wenn ich jedoch nach dem Aufruf von USS *C1 = new .... mir mit Alt+F5 den Debug Inspektor ansehe, sind in den Daten die in TSerialPort.h als private deklarierten Variablen ComPort, Baudrate usw. dort sichtbar. Allerdings mit völlig unsinnigen Werten. Das Anzeigen von z.B. C1-&gt;Port-&gt;Baudrate ergibt den korrekten Wert von 9600. Wenn ich mir die Eigenschaften vom Objekt Port anzeigen lasse ist logischerweise auch alles ok.<br />
Nur das die als private deklarierten Variablen im Debug Inspektor von C1 mit unsinnigen Werten angezeigt werden macht mich etwas stutzig. Muss mir das zu denken geben oder ist das einfach so?</p>
<p>Grüße,<br />
Jochen</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/118798/vererbung-und-die-anzeige-der-daten-im-debug-inspektor</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Jul 2026 20:59:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/118798.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 24 Aug 2005 13:18:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vererbung und die Anzeige der Daten im Debug-Inspektor on Wed, 24 Aug 2005 13:18:17 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem. Zuerst etwas Erklärung und Code. Ich habe zwei Klassen, die eine TSerialCom die den Zugriff auf die seriellen Schnittstellen ermöglicht:<br />
Die .h dazu:</p>
<pre><code class="language-cpp">class TSerialCom
{
  public:
    DWord      ComWrite  (char* buffer,
                          int   BytesToSend);
    DWord      ComRead   (char* buffer,
                          int   BytesToRead);
    int        ComOpen   (int   CPort,
                          int   Bd,
                          int   DataB,
                          int   Par,
                          int   StopB);
    void       ComClose  (void);

    __fastcall TSerialCom(void);
    __fastcall ~TSerialCom(void);

  private:
    HANDLE              hComm[10];
    COMMTIMEOUTS        ctmoNew;
    COMMTIMEOUTS        ctmoOld;

    int                 ComPort,
                        Baudrate,
                        DataBits,
                        Parity,
                        StopBits;

};
</code></pre>
<p>Jetzt gibt es eine zweite Klasse USS die die Funktionalität eines bestimmten Übertragungprotokolls ermöglicht. Da diese die Funktionen von TSerialCom braucht:</p>
<p>uss.h:</p>
<pre><code class="language-cpp">class USS : public TSerialCom
{
  private:
      int	         ussTyp;
      TSerialCom  *Port;
      struct      NettoData
        {
        unsigned __int16 Lge,  Adr,  Ak,   Pnu,  Ind,  Pwe[PWE_VAR],
	                Pzd1, Pzd2, Pzd3, Pzd4, Pzd5, Pzd6;
        };

  public:
      USS (int Com, int Baud, int Data, int Parity, int Stop);
      ~USS();											
      void      Xmit    (void);
      void      Init    (void);

      NettoData         Tx,
                        Rx;
      int               UssErrorCode;
      AnsiString        UssErrorStr;

};
</code></pre>
<p>Der Konstruktor von USS:</p>
<pre><code class="language-cpp">USS::USS (int Com, int Baud, int Data, int Parity, int Stop)
{
  Port = new TSerialCom();
  ussTyp = USS2; //Voreinstellung 4/6 Worte
  Port-&gt;ComOpen(Com, Baud, Data, Parity, Stop);
  Init();
  UssErrorCode = 0;
  UssErrorStr = &quot;&quot;;

}
</code></pre>
<p>Der Destruktor von USS:</p>
<pre><code class="language-cpp">USS::~USS()
{
  Port-&gt;ComClose();
  delete Port;
}
</code></pre>
<p>Und jetzt der eigentliche Aufruf, aufs Wesentliche reduziert:</p>
<pre><code class="language-cpp">USS *C1 = new USS(COM1, 9600, 8, EVEN, 1);
C1-&gt;Xmit();
delete C1;
</code></pre>
<p>Funktionieren tut eigentlich alles. Mit dem Erzeugen des Objektes C1 wird die Schnittstelle korrekt geöffnet, die Daten können übertragen werden, mit dem delete wird die Schnittstelle geschlossen. Funktionell also alles ok.<br />
Wenn ich jedoch nach dem Aufruf von USS *C1 = new .... mir mit Alt+F5 den Debug Inspektor ansehe, sind in den Daten die in TSerialPort.h als private deklarierten Variablen ComPort, Baudrate usw. dort sichtbar. Allerdings mit völlig unsinnigen Werten. Das Anzeigen von z.B. C1-&gt;Port-&gt;Baudrate ergibt den korrekten Wert von 9600. Wenn ich mir die Eigenschaften vom Objekt Port anzeigen lasse ist logischerweise auch alles ok.<br />
Nur das die als private deklarierten Variablen im Debug Inspektor von C1 mit unsinnigen Werten angezeigt werden macht mich etwas stutzig. Muss mir das zu denken geben oder ist das einfach so?</p>
<p>Grüße,<br />
Jochen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/857536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/857536</guid><dc:creator><![CDATA[JoKo]]></dc:creator><pubDate>Wed, 24 Aug 2005 13:18:17 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und die Anzeige der Daten im Debug-Inspektor on Wed, 24 Aug 2005 13:26:58 GMT]]></title><description><![CDATA[<p>was sind denn das fuer unsinnige werte? werden in ComOpen die privaten elemente gesetzt (steht ja nirgends)? sind natuerlich nur die werte gesetzt, die du auch initialisierst, alle anderen sind undefiniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/857540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/857540</guid><dc:creator><![CDATA[Sunday]]></dc:creator><pubDate>Wed, 24 Aug 2005 13:26:58 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und die Anzeige der Daten im Debug-Inspektor on Wed, 24 Aug 2005 14:03:30 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Das liegt wohl daran, dass du von TSerialCom erbst aber diese Variablen im Konstruktor nicht initialisierst. Da du eine Membervariable von diesem Typ in USS hast brauchst du das doch eigentlich garnicht. Lass also USS einfach nicht von TSerialCom erben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/857577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/857577</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 24 Aug 2005 14:03:30 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und die Anzeige der Daten im Debug-Inspektor on Thu, 25 Aug 2005 06:18:10 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>... Lass also USS einfach nicht von TSerialCom erben.</p>
</blockquote>
<p>Jep, manchmal kann es wirklich einfach sein, Danke! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/857973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/857973</guid><dc:creator><![CDATA[JoKo]]></dc:creator><pubDate>Thu, 25 Aug 2005 06:18:10 GMT</pubDate></item></channel></rss>