www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1996/12/20/09:55:20

From: Ian Chapman <ichapman AT nortel DOT ca>
Newsgroups: comp.os.msdos.djgpp
Subject: Sword
Date: Wed, 18 Dec 1996 12:29:15 -0500
Organization: Nortel Technology
Lines: 110
Message-ID: <32B829EB.AB0@nortel.ca>
NNTP-Posting-Host: bkanm382.bnr.ca
Mime-Version: 1.0
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

Hi all,
I originally sent this to Eric on the Sword program however he must 
have moved or be off for Christmas.  Maybe another member of the sword 
project can help me.

I've been looking over the SWORD project.  I think that I've got it 
right.  I've unzipped the sw21_v2, sw21_doc, and sw21_p2 files as I'm 
using djgpp 2.0.

I've also printed the dot.ps file which has quite an interesting 
write-up.  The first example is fail.cc.  Since I'm new to c++ and the 
Sword authors are keen on understanding a point on this program I've 
tried it out.  It failed to compile and I do not see why.  
I've concatenated a marked up version of fail.cc 
to this email.

They also say that it gives the unexpected result

TObject1 creation :: TObject1::foo
TObject2 creation :: TObject1::foo

The explanation given is TObject2 cannot call his virtual method foo 
during construction of its base object TObject1 because at this time 
virtual methods table for TObject2 does not exist yet.

My explanation is more simple.  When TObject2 is created it is derived 
from the base class TObject1 and the constructor for its base class
is executed, TObject1::foo() is executed and TObject2::foo() is never 
called it looks dead code to me.

So I have two question why compile errors and what is the point I'm 
missing.

Je comprendre la Francaise pour lire et parle mais mon expression 
ecrite est mauvais comme vous pouvez voir.



     Bien a vous, Regards Ian.

Voici fail.cc avec "compile errors" ajoute.
Here is the code

#include <stdio.h>

// --- class TObject1 definition
class TObject1
{ public:
    TObject1();
    virtual void foo();
};

TObject1::TObject1()
{ foo();
}
void TObject1::foo()
{ printf("TObject1::foo\n");
}
// --- class TObject2 definition
class TObject2 : public TObject1

{ public:
    TObject2();
    virtual void foo();
}

TObject2::TObject2()   : TObject1()

{ }  

//************* ERROR return type spec for constructor invalid.

void TObject2::foo()

{ printf("TObject2::foo\n");

}

void main(void)
{ TObject1 *O1;  
//*******Warning return type for main changed to integer type.

  TObject2 *O2;
  printf("TObject1 creation : ");
  O1=new TObject1();
  printf("TObject2 creation : ");
  O2=new TObject2();
  //
  delete O2;
  delete O1;
}



















- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019