Initialization of a data memeber

From: Marco van Leeuwen (mvl@nikhef.nl)
Date: Thu Aug 05 1999 - 13:25:13 MEST


Hi all,

I encountered a small problem, of which I don't know whther it is a plain
C++ thing or zomething more CINT-specific. I think this is quite a common
thing, so I'll pose the question here:

Suppose I have a class with a Pointer data member. If I want to use this
pointer dynamically, i.e. be able to change the thing to which the pointer
points during execution, the class defention would look somthing like this:

//TTry.h:

class TTry {

public:

  TTry(TH1F& tmpH = 0);
  Fill(TH1F& tmpH); 

IsFilled();
  ~TTry() {;}

protected:
  TH1F* fHisto=0;
};


//TTry.C:
#include "TTry.h"

TTry::TTry(TH1F& tmpH)
{
   if (tmpH!=0) fHisto = new
TH1F(tmpH);
}

void TTry::Fill(TH1F& tmpH)
{
   fHisto = new
TH1F(tmpH);
}

Int_t TTry::IsFilled()
{
   if (fHisto!=0) 
     return 1;

 else
     return 0;
}

Using this class at the root-prompt:

.L TTry.C
TTry a
a.IsFilled()

Shows that the class is assumed to be filled, i.e. fHisto != 0. This can be
solved by adding a line fHisto=0 in the constructor. This behaviour seems
to be in contarst with the fact that typing TH1F *a at the ROOT-prompt
return a Null-Pointer.
The question is:
1) Is there a way to initialize class data members in the class definition?
2) Does the type TH1F* have a "default constructor", and, if so, why
doesn't it set the pointer to zero (in this case?

By the way: isn't ROOT supposed to execute the macro ~/rootlogon.C or
$HOME/rootlogon.C at startup? If it doesn't why could that be??

Thanks,

Marco van Leeuwen



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:37 MET