[TYPES] Any formal models of method lookup mechanism in C++?

Mitchell Wand wand at ccs.neu.edu
Mon Jun 26 14:24:50 EDT 2017


Don't know if it's helpful, but here's another reference...   --Mitch

Jonathan~G. Rossie, Daniel~P. Friedman, and Mitchell Wand. Modeling
Subobject-based Inheritance. In Pierre Cointe, editor, *Proc. European
Conference on Object-Oriented Programming*, volume 1098 of *Lecture Notes
in Computer Science*, pages 248--274, Berlin, Heidelberg, and New York,
July 1996. Springer-Verlag.

On Mon, Jun 26, 2017 at 1:51 PM, Gabriel Scherer <gabriel.scherer at gmail.com>
wrote:

> [ The Types Forum, http://lists.seas.upenn.edu/mailman/listinfo/types-list
> ]
>
> My entry point to the "formalizing C++" litterature is Tahina
> Ramananandro's PhD thesis work, which does model (multiple)
> inheritance and casts, but focuses in particular on object
> initialization/destruction and object layout -- formalized in Coq.
>
>   Mechanized Formal Semantics and Verified Compilation for C++ Objects
>   Tahina Ramananandro, 2011
>   http://gallium.inria.fr/~tramanan/cpp/
>
> It contains a nice "Related Work" section mention several earlier
> works on C++ inheritance and casts, and in particular builds upon
> Daniel Wasserab's 2010 thesis (formalized in Isabelle) and the
> corresponding conference article
>
>   An operational semantics and type safety proof for multiple inheritance
> in C++
>   Daniel Wasserrab, Tobias Nipkow, Gregor Snelting, and Frank Tip
>   2006
>
> and Michael Norrish's more complete HOL formalization
>
>   A Formal Semantics for C++
>   Michael Norrish.
>   2008
>
>
> On Mon, Jun 26, 2017 at 10:51 AM, Yanlin Wang <huohuohuomumu at gmail.com>
> wrote:
> > [ The Types Forum, http://lists.seas.upenn.edu/
> mailman/listinfo/types-list ]
> >
> >   Dear all,
> >
> >
> > I am formalizing a C++-like multiple inheritance model, please look at
> this piece of code:
> >
> >
> > //g++  5.4.0#include <iostream>class Deck {    public:        virtual
> void draw () {
> >             std::cout << "Deck::draw" << std::endl;
> >         }        virtual void shuffleAndDraw () {
> >             std::cout << "Deck::shuffle" << std::endl; draw();
> }};class LDeck : public Deck {    public:
> >         virtual void draw () {
> >             std::cout << "L::draw" << std::endl;
> >         }};class Paint {    public:
> >         virtual void draw () {
> >             std::cout << "Paint::draw" << std::endl;
> >         }};class Top : public LDeck, public Paint {};int main(){    Top
> b;    Top *a = &b;    a->shuffleAndDraw();//shuffle and Ldraw
> a->Deck::draw(); //draw    a->Paint::draw();//paint
> ((Deck*)a)->draw();//LDraw    ((Paint*)a)->draw();//paint    return 0;}
> >
> >
> >
> >
> > For resolving the method call “ ((Deck*)a)->draw()”, C++ uses both the
> static (Deck) and dynamic(Top) type information of object a, so that the
> method call “draw()” dispatches to LDeck::draw().
> >
> >
> > I was wondering whether there are any formal models that describes this
> method lookup mechanism in C++. If anyone knows, could you please let me
> know? Thank you!
> >
> >
> > Best regards,
> > Yanlin Wang
> >
> >
> >
>


More information about the Types-list mailing list