C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

richtiges überladen von mem. funktionen?

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Sch374le Daniel
Guest





PostPosted: Fri Sep 24, 2004 7:26 pm    Post subject: richtiges überladen von mem. funktionen? Reply with quote



Hallo NG,

ist folgedes zulässiger Code

class X
{
public:
protected:
virtual int foo() = 0;
};

class Y : public X
{
public:
virtual int foo() { /**/ };
protected:
};

(und selbiges ohne virtual keyword davor)
sollte Compiler das beanstanden?

MfG

Daniel

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Rolf Magnus
Guest





PostPosted: Sun Sep 26, 2004 3:51 pm    Post subject: Re: richtiges überladen von mem. funktionen? Reply with quote



Schüle Daniel wrote:

Quote:
Hallo NG,

ist folgedes zulässiger Code

class X
{
public:
protected:
virtual int foo() = 0;
};

class Y : public X
{
public:
virtual int foo() { /**/ };
protected:
};

(und selbiges ohne virtual keyword davor)
sollte Compiler das beanstanden?

Warum sollte er es beanstanden?

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Werner Salomon
Guest





PostPosted: Mon Sep 27, 2004 10:43 am    Post subject: Re: richtiges überladen von mem. funktionen? Reply with quote



"Schüle Daniel" <for_usenet2000 (AT) yahoo (DOT) de> wrote

Quote:
ist folgedes zulässiger Code

class X
{
public:
protected:
virtual int foo() = 0;
};

class Y : public X
{
public:
virtual int foo() { /**/ };
protected:
};

Hallo Daniel,
Hinter foo ist das ';' zuviel und das return fehlt. Also besser
virtual int foo() { /**/ return 0; }

Quote:
(und selbiges ohne virtual keyword davor)
das 'virtual' in 'Y' wegzulassen ist ok, aber wegen der besseren

Lesbarkeit würde ich es stehen lassen.

Schwierigkeiten könntest Du noch haben, wenn Du versuchst X als
polymorphe Basis-Klasse zu benutzten - das ist ja meist der Sinn
solcher Konstrukte. Dann kommst Du von außen an X::foo nicht ran, da
es protected ist.

Also z.B.:
int mach( X& x ) {
return x.foo(); // <- Fehler, da X::foo protected
}
int main() {
Y y;
int erg = y.foo(); // ok
return mach( y );
}
kompiliert nicht.

Gruß
Werner

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Daniel Sch374le
Guest





PostPosted: Mon Sep 27, 2004 5:42 pm    Post subject: Re: richtiges überladen von mem. funktionen? Reply with quote

Hi

[...]

Quote:
(und selbiges ohne virtual keyword davor)
das 'virtual' in 'Y' wegzulassen ist ok, aber wegen der besseren
Lesbarkeit würde ich es stehen lassen.

ich persönlich finde es schade, dass virtual "optional" in abgeleiteten
classen ist

Quote:
Schwierigkeiten könntest Du noch haben, wenn Du versuchst X als
polymorphe Basis-Klasse zu benutzten - das ist ja meist der Sinn
solcher Konstrukte. Dann kommst Du von außen an X::foo nicht ran, da
es protected ist.

ja das ist verständlich, das Beispiel hat mit "virtualen" Funktion wenig
Sinn ergeben
mich hat vor allem interessiert, ob ein (Klassen)Bezeichner seinen
Sichtbarkeitsbereich
(von protected --> public) so einfach wechseln darf

MfG

Daniel

[...]

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Horst Kraemer
Guest





PostPosted: Mon Sep 27, 2004 9:01 pm    Post subject: Re: richtiges 374berladen von me... Reply with quote

"Daniel Schüle" <uval (AT) rz (DOT) uni-karlsruhe.de> wrote:

Quote:
Hi

[...]

(und selbiges ohne virtual keyword davor)
das 'virtual' in 'Y' wegzulassen ist ok, aber wegen der besseren
Lesbarkeit würde ich es stehen lassen.

ich persönlich finde es schade, dass virtual "optional" in abgeleiteten
classen ist

Schwierigkeiten könntest Du noch haben, wenn Du versuchst X als
polymorphe Basis-Klasse zu benutzten - das ist ja meist der Sinn
solcher Konstrukte. Dann kommst Du von außen an X::foo nicht ran, da
es protected ist.

ja das ist verständlich, das Beispiel hat mit "virtualen" Funktion wenig
Sinn ergeben
mich hat vor allem interessiert, ob ein (Klassen)Bezeichner seinen
Sichtbarkeitsbereich
(von protected --> public) so einfach wechseln darf

Beachte, dass fuer den Zugriff die *statischen* und nicht die
dynamischen Zugriffsrechte gelten:

Beispiel:

struct X
{
public:
virtual void foo();
};

struct Y:X
{
private:
virtual void foo();
};


void bar()
{
X* px = new Y;
p->foo(); // OK, Y::foo() wird ueber einen X-Ausdruck aufgerufen
Y* py = new Y;
py->id(); // Fehler, Aurfruf ueber einen Y-Ausdruck
}

Fuer das Zugriffsrecht auf das jeweilige 'foo' ist das Zugriffsrecht
in der Klasse des Ausdrucksaufrufs - im ersten Fall als der Typ von
px* : X und im zweiten Falle der Typ von py*:Y - entscheidend und
nicht das Zugriffsrecht der Klasse, der das Objekt angehoert, das
tatsaechlich am Zeiger haengt.

--
Horst

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.