← Back to team overview

dolfin team mailing list archive

Re: Multiple inheritance

 

I believe that the cast causes it to offset into the object structure.
Everyone still
points to the same virtual function table, but the full object structure
consists of
a concatenation of the individual parts for superclasses. This makes it easy
to
do casts. I had to do this when I wrote my own classes for SIDL.

  Matt

On Mon, Nov 9, 2009 at 7:12 AM, Anders Logg <logg@xxxxxxxxx> wrote:

> I'm struggling with some problems in the implementation of automatic
> update/interpolation during mesh refinement.
>
> I've narrowed one of the problems down to the following simple
> example. Say that a class C inherits from both A and B (which both
> have member variables - this is important). Then I would expect an
> object c of class C to have the same address/pointer as seen from all
> three classes. But what happens is that A and C (if C inherits from A
> first) agree on the address, but not B.
>
> Try the following simple code:
>
> #include <iostream>
> using namespace std;
>
> class A
> {
> public:
>  A() { cout << "A pointer: " << this << endl; }
>  int avar;
> };
>
> class B
> {
> public:
>  B() { cout << "B pointer: " << this << endl; }
>  int bvar;
> };
>
> class C : public A, public B
> {
> public:
>  C() { cout << "C pointer: " << this << endl; }
> };
>
> int main()
> {
>  C c;
>
>  A* a = &c;
>  B* b = &c;
>
>  cout << "&a = " << a << endl;
>  cout << "&b = " << b << endl;
>  cout << "&c = " << &c << endl;
>
>  return 0;
> }
>
> The output when running the program is something like this:
>
> A pointer: 0x7fff89a97a50
> B pointer: 0x7fff89a97a54
> C pointer: 0x7fff89a97a50
> &a = 0x7fff89a97a50
> &b = 0x7fff89a97a54
> &c = 0x7fff89a97a50
>
> Any ideas why this happens?
>
> --
> Anders
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.9 (GNU/Linux)
>
> iEYEARECAAYFAkr4FVAACgkQTuwUCDsYZdF2tgCePK5OFioKblaHHfXwRvL6unAe
> mB0AniUt6wEKMqcdQvcZbZtjVE7+myw7
> =9DcD
> -----END PGP SIGNATURE-----
>
> _______________________________________________
> DOLFIN-dev mailing list
> DOLFIN-dev@xxxxxxxxxx
> http://www.fenics.org/mailman/listinfo/dolfin-dev
>
>


-- 
What most experimenters take for granted before they begin their experiments
is infinitely more interesting than any results to which their experiments
lead.
-- Norbert Wiener

Follow ups

References