From: Timothy Jewett on 22 Apr 2010 13:53 I have a project that has a base class, inherited class and inherited class class CSession { public: BOOL Method1(); BOOL Method2(); }; class CHtml : public CSession { BOOL Method1(); BOOL Method2(); }; class CClient : public CHtml { BOOL Method1(); BOOL Method2(); }; I would like to Inherit the CHtml class from a different base class class CSessionSSL : CSecure { BOOL Method1(); BOOL Method2(); }; class CHtmlSSL : public CSessionSSL { BOOL Method1(); BOOL Method2(); }; class CClientSSL : public CHtmlSSL { BOOL Method1(); BOOL Method2(); }; without redefining all the methods in the CHtml & CClient code inherited from the new base class. I assume this can be done with templates but I do not understand how to instantiate the top classes CClient & CClientSSL? Thanks in advance. -- Timothy Jewett Jewettware(a)online.nospam
From: Victor Bazarov on 22 Apr 2010 15:07 Timothy Jewett wrote: > I have a project that has a base class, inherited class and inherited class > > class CSession > { > public: > BOOL Method1(); > BOOL Method2(); Not virtual? > }; > > class CHtml : public CSession > { > BOOL Method1(); > BOOL Method2(); > }; > > class CClient : public CHtml > { > BOOL Method1(); > BOOL Method2(); > }; > > I would like to Inherit the CHtml class from a different base class > > class CSessionSSL : CSecure > { > BOOL Method1(); > BOOL Method2(); > }; > > class CHtmlSSL : public CSessionSSL > { > BOOL Method1(); > BOOL Method2(); > }; > > class CClientSSL : public CHtmlSSL > { > BOOL Method1(); > BOOL Method2(); > }; > > without redefining all the methods in the CHtml & CClient code inherited > from the new base class. I assume this can be done with templates but I do > not understand how to instantiate the top classes CClient & CClientSSL? You haven't given us enough to go on, I suspect. Are you looking to implement 'CClientSSL' by utilizing some 'CClient' functionality but don't want to rewrite/redefine it? And only redefine some small portion of the base 'Session' class? So, if you define your CHtml as a template like this: template<class Session> class CHtml : public Session { }; then you can define your Client classes like this: class CClient : public CHtml<CSession> ... and class CClientSSL : public CHtml<CSessionSSL> ... .. I am not sure what exactly you're gaining here. Get a copy of Andrei Alexandrescu's "Modern C++ Design", and read about "policy-based design". That's pretty much what you want, you just need to connect your "clients" using different "sessions". V -- Please remove capital 'A's when replying by e-mail I do not respond to top-posted replies, please don't ask
From: Timothy Jewett on 23 Apr 2010 11:07 You are correct in what I am doing, which is to just have Client objects connect to to different base classes. In the example both CClient and CHtml need to be the same code base so do I define CClient like this: template<class CHtml<CSession>> class CClientBase : public CHtml instantiate: CClient :public CClientBase< Chtml <CSession> > & CClientSSL : public CClientBase< CHtml <CSessionSSL> > I will follow up on that book, Thanks again. -- Timothy Jewett Jewettware(a)online.nospam "Victor Bazarov" wrote: > Timothy Jewett wrote: > > I have a project that has a base class, inherited class and inherited class > > > > class CSession > > { > > public: > > BOOL Method1(); > > BOOL Method2(); > > Not virtual? > > > }; > > > > class CHtml : public CSession > > { > > BOOL Method1(); > > BOOL Method2(); > > }; > > > > class CClient : public CHtml > > { > > BOOL Method1(); > > BOOL Method2(); > > }; > > > > I would like to Inherit the CHtml class from a different base class > > > > class CSessionSSL : CSecure > > { > > BOOL Method1(); > > BOOL Method2(); > > }; > > > > class CHtmlSSL : public CSessionSSL > > { > > BOOL Method1(); > > BOOL Method2(); > > }; > > > > class CClientSSL : public CHtmlSSL > > { > > BOOL Method1(); > > BOOL Method2(); > > }; > > > > without redefining all the methods in the CHtml & CClient code inherited > > from the new base class. I assume this can be done with templates but I do > > not understand how to instantiate the top classes CClient & CClientSSL? > > You haven't given us enough to go on, I suspect. Are you looking to > implement 'CClientSSL' by utilizing some 'CClient' functionality but > don't want to rewrite/redefine it? And only redefine some small portion > of the base 'Session' class? > > So, if you define your CHtml as a template like this: > > template<class Session> class CHtml : public Session > { > }; > > then you can define your Client classes like this: > > class CClient : public CHtml<CSession> ... > > and > > class CClientSSL : public CHtml<CSessionSSL> ... > > .. I am not sure what exactly you're gaining here. Get a copy of Andrei > Alexandrescu's "Modern C++ Design", and read about "policy-based > design". That's pretty much what you want, you just need to connect > your "clients" using different "sessions". > > V > -- > Please remove capital 'A's when replying by e-mail > I do not respond to top-posted replies, please don't ask > . >
|
Pages: 1 Prev: .make file issues/ configuration parameters in headers Next: How do I run Form2, from Form1 ? |