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 

Question about pure virtual functions

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language (comp.lang.c++)
View previous topic :: View next topic  
Author Message
Sergey
Guest





PostPosted: Mon Oct 31, 2005 12:14 am    Post subject: Question about pure virtual functions Reply with quote



Is it possible to realize such an algorithm (this one is not working):

class a1 {

public:

void af () { bf(); }
virtual void bf () = 0;

};

class b1 {

public:

virtual void bf () { }

};

class c1 : public a1, public b1 { };

main () {

c1 x;

}

The general idea is in that if you have one group of classes for one
option and another group of classes for another option you can combine
the general class by any class from the first group and by any class
from the second group. Question is how can functions of one group refer
to functions of another?
Thank you for answers.
Sergey
Back to top
David Hilsee
Guest





PostPosted: Mon Oct 31, 2005 12:42 am    Post subject: Re: Question about pure virtual functions Reply with quote



"Sergey" <tempdel (AT) yandex (DOT) ru> wrote

Quote:
Is it possible to realize such an algorithm (this one is not working):

class a1 {

public:

void af () { bf(); }
virtual void bf () = 0;

};

class b1 {

public:

virtual void bf () { }

};

class c1 : public a1, public b1 { };

main () {

c1 x;

}

The general idea is in that if you have one group of classes for one
option and another group of classes for another option you can combine
the general class by any class from the first group and by any class
from the second group. Question is how can functions of one group refer
to functions of another?
Thank you for answers.
Sergey

I'm not 100% sure of what you're trying to do, but it looks like some sort
of "mixin" where the b1 class contains the implementation for a1::bf(), but
it does not inherit from a1, and c1 must somehow "combine" the relationship
between the two classes. You can do this with a simple, straightforward
"override and delegate" function:

class c1 : public a1, public b1 {
virtual void bf() {
b1::bf();
}
};

Here, c1::bf() is invoked, and it calls b1::bf().

--
David Hilsee



Back to top
John Carson
Guest





PostPosted: Mon Oct 31, 2005 12:52 am    Post subject: Re: Question about pure virtual functions Reply with quote



"Sergey" <tempdel (AT) yandex (DOT) ru> wrote

Quote:
Is it possible to realize such an algorithm (this one is not working):

class a1 {

public:

void af () { bf(); }
virtual void bf () = 0;

};

class b1 {

public:

virtual void bf () { }

};

class c1 : public a1, public b1 { };

main () {

c1 x;

}

The general idea is in that if you have one group of classes for one
option and another group of classes for another option you can combine
the general class by any class from the first group and by any class
from the second group. Question is how can functions of one group
refer to functions of another?
Thank you for answers.
Sergey

You can give them a common base class and move the virtual function to it:

#include <iostream>
using namespace std;

class Base
{
public:
virtual void bf () = 0;
};


class a1 : virtual public Base
{
public:
void af () { bf(); }
};

class b1 : virtual public Base
{
public:
virtual void bf ()
{
cout << "This is the b1 override of bfn";
}
};

class c1 : public a1, public b1 { };

int main ()
{
c1 x;
x.af();
}


--
John Carson

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language (comp.lang.c++) 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.