On Fri, Jun 14, 2013 at 7:16 AM, Marc-André Dubois <ma.dub...@me.com> wrote:
> Hi guys,
>             I want to make a subclass of Avogadro::Molecule. Can I do that
> kind of association?
>
> superclass: Molecule
> subclass: CustomMolecule

It is possible to subclass Molecule. The XtalOpt extension does this a lot, e.g.

https://github.com/dlonie/XtalOpt/blob/stable/src/globalsearch/structure.h

> Molecule *parent = gl->molecule();
> CustomMolecule *child = parent;

This wouldn't work -- you can't expect the gl->molecule() to be the
CustomMolecule type. In C++, the object's type is fixed when it is
instantiated -- an object instantiated as a Molecule cannot be used as
a CustomMolecule. However, if the "parent" pointer above is actually
pointing to an instance of CustomMolecule, you can safely recover the
CustomMolecule pointer with:

Molecule *mol = gl->molecule();
CustomMolecule *customMol = dynamic_cast<CustomMolecule*>(mol);
if (customMol != 0) {
  ... // do work with customMol pointer.
}

The dynamic_cast will check if the object pointed to by "mol" is
actually an instance of CustomMolecule. If it is, it returns a
CustomMolecule* pointer to the object. If it is not, if returns 0.
This is how to check if a pointer can be safely downcast into a
subclass type.

HTH,
Dave

> (gl is the GLWidget). I know this seems to be an easy question, but I face
> some problems and I am not so familiar with C++... Thanks,
>
> Marc
>
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by Windows:
>
> Build for Windows Store.
>
> http://p.sf.net/sfu/windows-dev2dev
> _______________________________________________
> Avogadro-devel mailing list
> Avogadro-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/avogadro-devel
>

------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev
_______________________________________________
Avogadro-devel mailing list
Avogadro-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/avogadro-devel

Reply via email to