Hi,
A very generic (and very naive probably) question about ClassDef and
ClassImp. All my apologies if this is really trivial.
Assume I have a class A deriving from TObject :
class A : public TObject {
public:
virtual void SomeMethod(void) = 0 ;
} ;
and a class B deriving from A :
class B : public A
{
public:
B() : A() { }
virtual ~B() { }
virtual void SomeMethod(void) { cout << "fSize" << endl ; }
private:
Int_t fSize ;
ClassDef(B,1)
} ;
Class A is meant to be just an interface (and to provide a
"TObject"-type), no I/O intended, but I'd like the following to work
under the ROOT prompt :
root[0] A* a = new B() ;
root[1] a.SomeMethod() ;
i.e. my class A must be in the dictionnary.
Class B is meant to be a persistent object, so I put a ClassDef/ClassImp
in there.
So here are the questions then :
a) should I put a ClassDef(A,i) (i=0 ?) in class A ?
b) what should be the corresponding LinkDef.h file for those two classes
in order to i) have access to the A methods from the root prompt and ii)
being able to write B objects into a ROOT file.
I made some tests and would conclude that I must put a ClassDef(A,0) and
use
#pragma link C++ class A;
#pragma link C++ class B; // or B+;
if I want my stuff to work.
BTW, in real life, class A is not one I get much control on ; it does
not have a ClassDef, and uses
#pragma link C++ class A-! ;
Is that wrong or not ?
Thanks for your help,
Best regards,
PS: I'm using ROOT 3.01/05 on a Linux box.
--
Dr. Laurent APHECETCHE (mailto:aphecetc@in2p3.fr) (IN2P3-CNRS)
SUBATECH-EMN-4 rue Alfred Kastler-BP 20722-44307 NANTES cedex 03
TEL (+33/0) 2 51 85 84 17 - FAX (+33/0) 2 51 85 84 24 (France)
Collaborations PHENIX http://www.phenix.bnl.gov/~aphecetc et MEGAPIE.
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:03 MET