15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Multiple Inheritance && MFC

Deepak Saxena~ -- dsaxena@sedona.intel.com
Friday, February 02, 1996


I'm in the process of designing an MFC application at the moment and am
wondering whether or not I should use multiple inheritance.  I know that
the older versions of MFC are hellish to use with MI, but I was
wondering what sort of support MFC 4.0 has.  I will be upgrading to MSVC
4.0 in the next week or so and will actually start coding in a while.
Most importantly, does CRuntimeClass support MI.  My class hiearchy
right now has places where I have a class derived from three classes
which are all derived from the same class which is itself derived from
CObject:

class CA : public CObject;
class CB: public CA;
class CC: public CA;
class CD: public CA;

class CE: public CB, public CC, public CD;

with the new MFC, can I do:
	CA *pA = GetCAObject();
	
	if(pA->IsTypeOf(RUNTIME_CLASS(CC)))
	{
		// Do stuff here;
	}




David J. Straley -- djs@cnj.digex.net
Saturday, February 03, 1996

[Mini-digest: 3 responses]

>
>I'm in the process of designing an MFC application at the moment and am
>wondering whether or not I should use multiple inheritance.  I know that
>the older versions of MFC are hellish to use with MI, but I was
>wondering what sort of support MFC 4.0 has. 

    I've used Multiple inheritance successfully with MFC. There is a
Technical article on doing this.  Make sure that your parent classes contain
only ONE CWnd-derived class, max, for starters.  Also, you have to put that
CWnd class (if it exists) as the first or last class of the list of classes
(I forgot which - see the article).  You'll also have to override "new" and
"delete".  Just do what the article says in this and don't be frightened!
Also, if two or more of your parents have the same member function name,
like "Create()", you'll have to explicitly call the correct one when you are
trying to use it, i.e.  "CWnd::Create()", for example.


                        Regards,



			Dave  Straley


	David J. Straley, Software Developer  ---  djs@cnj.digex.net
            "Right-sized solutions for most any-sized Enterprise"    
                    Windows * Windows NT * Unix/X Windows 

-----From: "John Elsbree" 

(Please, let's not let this thread degenerate into a religious battle over 
whether MFC should support MI...)

MFC 4.0 really hasn't changed any, with respect to MI. What you've seen in 
previous versions still holds true in this version.

Sorry if this isn't the answer you were hoping to hear.

//mfcTeam.m_johnels;	// does not represent Microsoft

-----From: mikeblas@interserv.com

On Fri, 2 Feb 1996, Deepak Saxena~  wrote:

>I'm in the process of designing an MFC application at the moment and am
>wondering whether or not I should use multiple inheritance.

You probably shouldn't.

>I know that
>the older versions of MFC are hellish to use with MI, but I was
>wondering what sort of support MFC 4.0 has. 

MFC 4.0 doesn't (and MFC 4.1 won't) like MI, either.

>Most importantly, does CRuntimeClass support MI. 

No.

>My class hiearchy
>right now has places where I have a class derived from three classes
>which are all derived from the same class which is itself derived from
>CObject:
>
>class CA : public CObject;
>class CB: public CA;
>class CC: public CA;
>class CD: public CA;
>
>class CE: public CB, public CC, public CD;

If this is really the only place you're using MI, you can _probably_ write 
your own version of CRuntimeClass and let it do something else instead.  You 
can't subclass CRuntimeClass because nothing in it is virtual.

There was an article in Doctor Dobbs' Journal within the last 3 or 4 months 
which explained how to graft some MI support into MFC.  There's also a bunch 
of files on CompuServe in the MSMFC fourm which demonstrate MI in MFC class 
hierarchies.

Microsoft doesn't support any of these approaches.

.B ekiM
--
TCHAR szDisc[] = _T("These words are my own; I do not speak for Microsoft.");




Poul A. Costinsky -- wizsofti@datasrv.co.il
Sunday, February 04, 1996

I think MS didn't make any changes in their relationships with MI.
But VC 4 now supports RTTI (run-time type information), so 
instead of CRuntimeClass you can use dynamic_cast etc.

There is a Technical note about MI and MFC, but it was written
before RTTI implementation (I think).

Hope this helps.
Regards,
Poul A. Costinsky(PoulACost@msn.com).

  ("`-''-/").___..--''"`-._
    (`6_ 6  )   `-.  (     ).`-.__.`)
     (_Y_.)'  ._   )  `._ `. ``-..-'
   _..`--'_..-_/  /--'_.' ,'
  (il).-''  (li).'  ((!.-




Chong Zhang -- cz@dana.ucc.nau.edu
Sunday, February 04, 1996

[Mini-digest: 2 responses]

I have been using Multiple Inheritance for years with MFC. But we don't 
use multiple MFC classes as base. Because MFC was not designed to support 
multiple inheritance. As long as you use only ONE MFC class in your base, 
you are all right.

Well, CRuntimeClass and all those related MACROs do not support M.I. I do 
have a set of MACROs developed in house to support M.I. But I use them 
only in my own libraries not in MFC. (I don't want to have a custom made 
MFC runtime DLL.)

-----From: "Scot Wingo" 


One more comment on this subject->

There were 2 articles that discussed MI and MFC in the 
January Dr. Dobbs.

 1. pg 84 - Jean-Louis Leroy "Multiple Inheritance for MFC 4.0"
    -Seems to answer your needs right on the button.

 2. pg 58 - "Extending MFC"
     -Talks about how we use MI to have CWnd/CView derivatives, while
      centralizing the drawing logic in a base class.


HTH,

Scot




| Вернуться в корень Архива |