PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ Frage


Gast
2004-06-25, 17:59:13
Hallo, ich hab hier mal eine Frage zu c++ und einem Copy Konstruktor.
Hier mal die Klassendeklaration:

class Base
{
public:
Base(const char* c_str);
Base(const Base& obj);
virtual ~Base();
protected:
char* c_str_;
};

im Konstruktor soll nur der c_str im klasseneigenen c_str_ gespeichert werden (mittels strcpy).
Im Copy Konstruktor soll der c_str_ von obj im Klasseneigenen c_str_ gespeicher werden.

Hier ein Codeschnippsel:
Base::Base(const Base& obj) : c_str_(0)
{
if(!obj.c_str_)
return;

c_str_ = new char[strlen(obj.c_str_) + 1];
strcpy(c_str_, obj.c_str_);
}

Nun meine Frage, kann der Zugriff auf obj.c_str_ funktionieren?

lg

Corrail
2004-06-25, 18:31:50
Ja, das geht. c_str__ ist zwar protected aber es greif ja eine Funtion der Klasse darauf zu.

Gast
2004-06-25, 18:42:26
hm, das hat mich ein wenig gewundert, da obj, eine andere Instanz ist.
Das heißt, jede Methode der Klasse Base kann auf protected Members einer anderen Instanz derselben Klasse zugreifen, oder?
Funktioniert das auch mit private Members?

lg

Metal Maniac
2004-06-25, 23:05:01
Hmm... aber normalerweise dürfte der Zugriff nicht funktionieren. Nur Funktionen desselben Objekts dürfen auf als 'protected' deklarierte Member zugreifen. Die einzige Lockerung gegenüber 'private' ist, dass Objekte abgeleiteter Klassen auch auf die 'protected'-Member der Basisklasse zugreifen dürfen (bei 'private' nicht).

Corrail
2004-06-26, 02:05:31
Original geschrieben von Metal Maniac
Hmm... aber normalerweise dürfte der Zugriff nicht funktionieren. Nur Funktionen desselben Objekts dürfen auf als 'protected' deklarierte Member zugreifen.

Es ist ja eine Funktion des Objektes die darauf zugreift. Zwar greift sie auf eine andere Instanz der Klasse zu, aber es ist die gleiche Klasse. AFAIK sollte das sehr wohl gehen.

zeckensack
2004-06-26, 02:40:30
Jopp, geht. Geht auch bei als private deklarierten Dingsbums.

Gast
2004-06-26, 12:32:32
Danke mal für eure Antworten. Ich habs auch selber ausprobiert und es hat mich einfach gewundert, daß dies funktioniert.

Aber das erspart mir in Zukunft einige get und set Methoden. :D

lg

Metal Maniac
2004-06-26, 23:48:25
Original geschrieben von zeckensack
Jopp, geht. Geht auch bei als private deklarierten Dingsbums.

Funktioniert tatsächlich... auch unter Java... ist zwar komisch, aber was soll's, man lernt nie aus ;)