[Gambas-user] newbie question virtual classes

johnf jfabiani at ...1109...
Wed Feb 1 17:04:24 CET 2006


On Tuesday 31 January 2006 23:15, Benoit Minisini wrote:
> On Wednesday 01 February 2006 07:07, Christopher Brian Jack wrote:
> > On Tue, 31 Jan 2006, johnf wrote:
> > > > Laurent
> > >
> > > OK so I can - but do not need to use it.  All right then what do doc's
> > > mean showing the virtual class.  As you can see I really don't
> > > understand the Doc's reference to the virtual class.  To me a virtual
> > > class is a class that describes an object for use in other objects. 
> > > Helper class or a class I inherit.  Anyway I don't understand what is
> > > being said in the doc's John
> >
> > Hmm are you coming to Gambas from a C++ background?  You can consider
> > "virtual class" to mean a class with pure virtual methods and private
> > constructor/destructors (which yields a virtual class that you cannot
> > create or copy but can pass by reference) but that has friends within
> > lower level components that implement the class (it can use the class as
> > a base).  Thus, though you cannot create the class directly or use it as
> > a base class in your Gambas programs, the friends that are implementing
> > the class can be accessed as ListBox.ListBoxItem[n] where the "virtual"
> > class here is only defining an interface to access the items of the
> > listbox.
> >
> > This bit of C++ (pardon me in advance if some of my syntax is off)
> > attempts to show what's going on.  It is possible in C++ to return a
> > reference to an interface whose implentor and interface objects are not
> > directly instantiable or useable as a base class using inheritence:
> >
> > class ListBox;
> > class ListBoxItemIMP;
> >
> > class _ListBoxItem {
> >   friend class _ListBoxItenIMP;
> >   private:
> >     _ListBoxItem() {}
> >     virtual ~_ListBoxItem {}
> >   public:
> >     std::String Text()=0
> >   ...
> > };
> >
> > class _ListBoxItemIMP : private _ListBoxItem {
> >   friend class ListBox;
> >   private:
> >     Listbox& host;
> >   private:
> >     _ListBoxItemIMP() {...}
> >     virtual ~_ListBoxItemIMP {...}
> >     SetParent(ListBox &parent) : host(parent) {...}
> >   public:
> >     std::String Text() {...}
> >     ...
> > };
> >
> > class ListBox : public Control {
> >   public:
> >     ListBox(Control &parent) {...}
> >     virtual ~ListBox() {...}
> >   private:
> >     std::vector<_ListBoxItemIMP> data;
> >   pubilc:
> >     ListBoxItem& operator [] (int idx) {return data[idx];}
> >     int Count() {return data.length();}
> >   ...
> > };
> >
> >
> > -- Christopher Brian Jack
>
> 'Virtual' class in Gambas has nothing to do with 'virtual' class in C++. I
> admit I badly chosen the word, but C++ did too, in a different way.
>
> A virtual class is actually a way for an object of a real class to look
> like another class, said virtual. Maybe 'pseudo-class' would be a better
> word.
>
> You cannot instanciate a virtual class. You can only use it temporarily
> inside an expression.
>
> For example: MyTreeView[key] returns a '.TreeViewItem' from its key, but
> you cannot put it inside a variable. You can only use it inside an
> expression, like MyTreeView[key].Text, or inside a WITH...END WITH control
> structure:
>
> WITH MyTreeView[key]
>   PRINT .Text
>   PRINT .Key
>   PRINT .Parent.Text
>   ...
> END WITH
>
> I did it to avoid object allocations. Gambas creates no object when you
> access an item inside a treeview, so things are faster.
>
> As the documentation is automatically generated, the documentation of
> properties that use virtual class is not very understandable at the moment.
> Sorry for the inconvenience!
>
> I hope it is clearer now :-)
>
> Regards,
Thanks I believe I understand.  I have been re-reading the doc's on the 
matter.  I think what is happening to me is I'm reading the doc's with my 
definitions from other languages in my mind.  But re-reading has helped. And 
of course your detail response is a great help.  BTW you have no reason to 
say sorry.  I love this language.   Soon I'll be able to help others 
(hopefully I am now - a little) and during breaks from other programming 
duties I'll help with creating components like a report writer.  

John

John




More information about the User mailing list