AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

C++/MFC: Zugriff trotz Protected

Ein Thema von Bernhard Geyer · begonnen am 22. Sep 2004 · letzter Beitrag vom 23. Sep 2004
Antwort Antwort
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#1

C++/MFC: Zugriff trotz Protected

  Alt 22. Sep 2004, 09:57
Code:
class CTestPrivateView : public CView
{
protected: // Nur aus Serialisierung erzeugen
   CTestPrivateView();
   DECLARE_DYNCREATE(CTestPrivateView)

   CString m_Test; // <- um diese Variable gehts
// Attribute
public:
   CTestPrivateDoc* GetDocument();

// Operationen
public:
....
};


void TestFunc( CTestPrivateView* pt)
{
   pt->m_Test = "Herbert";
}

void CTestPrivateView::OnDraw(CDC* pDC)
{
   TestFunc( this);
   CTestPrivateDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
   // ZU ERLEDIGEN: Hier Code zum Zeichnen der ursprünglichen Daten hinzufügen
}
Wieso ist der Zugriff auf m_Test erlaubt? Sollte doch Protected sein!
Für die Lösung gibt es Extra-Respekt
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: C++/MFC: Zugriff trotz Protected

  Alt 22. Sep 2004, 16:41
Moin Bernhard,

das ist jetzt zwar nur Vermutung, und kein Wissen, aber...

Wenn sich die beiden Abschnitte in der gleichen Datei befinden, kann der Protected Bereich auch "gesehen" werden.
(gilt zumindest für Delphi)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Eisenherz

Registriert seit: 10. Jun 2002
Ort: Stadeln
33 Beiträge
 
Delphi 5 Professional
 
#3

Re: C++/MFC: Zugriff trotz Protected

  Alt 22. Sep 2004, 17:52
Zitat von Christian Seehase:
Wenn sich die beiden Abschnitte in der gleichen Datei befinden, kann der Protected Bereich auch "gesehen" werden.
(gilt zumindest für Delphi)
Das ist bei C++ nicht so. Das private und protected aus C++ dürfte in etwa dem strictly private und strictly protected aus Delphi 8 entsprechen.

Das von Berhard Geyer gezeigte dürfte nur funktionieren, wenn die Klassendeklaration folgede Zeile enthält:
Code:
friend void TestFunc( CTestPrivateView* );
aloa Eisenherz
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: C++/MFC: Zugriff trotz Protected

  Alt 22. Sep 2004, 22:55
Es hat nichts mit dem Friends-Konzept zu tun. Eher mit einem der "großen Features" von C++ zu tun, welches sich auch als große Fehlerquelle herausstellen können.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#5

Re: C++/MFC: Zugriff trotz Protected

  Alt 22. Sep 2004, 23:21
Zitat von Bernhard Geyer:
Wieso ist der Zugriff auf m_Test erlaubt?
Handelt es sich zufällig um MSVC 6.0?

ps: wie sieht das Makro DECLARE_DYNCREATE aus... (Semikolon vergessen?)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: C++/MFC: Zugriff trotz Protected

  Alt 23. Sep 2004, 08:17
Zitat von NicoDE:
Zitat von Bernhard Geyer:
Wieso ist der Zugriff auf m_Test erlaubt?
Handelt es sich zufällig um MSVC 6.0?

ps: wie sieht das Makro DECLARE_DYNCREATE aus... (Semikolon vergessen?)
Kein Semikollon vergessen, aber folgendes (DECLARE_DYNCREATE = DECLARE_DYNAMIC + Etwas Erweiterung):

Code:
#define DECLARE_DYNAMIC(class_name) \
public: \
   static const CRuntimeClass class##class_name; \
   static CRuntimeClass* PASCAL GetThisClass(); \
   virtual CRuntimeClass* GetRuntimeClass() const; \
D.h. nach dem Makro steht alle folgenden Einträge erst mal auf public!
Gut das Borland bei der VCL nicht auf solche verwirrenten Konstrukte zurückgegriffen hat.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz