http://qs321.pair.com?node_id=193246


in reply to Re: Re: Perl - Is it an OO Language
in thread Perl - Is it an OO Language

This must be platform dependant because on my linux box with g++ 3.2. I get to link and execute.

John M. Dlugosz. Are you sure of what you say? Sorry about the off topic. ==toto.h

class A { int ma; void printit(); A::A() : ma(666) {} };
==toto1.cc
#include "iostream" #define class struct #include "toto.h" main() { A a; std::cerr << a.ma << "\n"; a.printit(); }
==toto2.cc
#include "iostream" #include "toto.h" void A::printit() { std::cerr << ma << "\n"; }
===Compilation, link, execution
$ g++ -c toto1.cc -o toto1.o $ g++ -c toto2.cc -o toto2.o In file included from toto2.cc:2: toto.h:1: warning: all member functions in class `A' are private $ g++ toto*.o -o a.out $ ./a.out 666 666 $

Replies are listed 'Best First'.
Re: Re x3: Perl - Is it an OO Language
by John M. Dlugosz (Monsignor) on Aug 28, 2002 at 16:06 UTC
    I suppose it's implementation-dependant as to whether this is actually checked. I suppose it's a tradeoff on whether you fail to link if you change the protection but "handle" overloading based on protection! I recall at least one compiler that checked, but it may be because it was more aggressive at optimizing and rearranging things.

    For a virtual function, re-ordering the definitions will indeed change things on any known compiler.