Re: [sv-bc] Question on pure virtual function

From: Surya Pratik Saha <spsaha_at_.....>
Date: Tue Oct 07 2008 - 08:32:37 PDT
Hi Gordon,
Thanks for the reply. I have another question, if the virtual base class 
is a typedef which is declared later then how it will be handled. For e.g.

typedef class base;
class derived extends base;
endclass

virtual class base;
    pure virtual function int f();
endclass

Regards
Surya



-------- Original Message  --------
Subject: Re:[sv-bc] Question on pure virtual function
From: Gordon Vreugdenhil <gordonv@model.com>
To: Surya Pratik Saha <spsaha@cal.interrasystems.com>
Cc: sv-bc@eda.org
Date: Tuesday, October 07, 2008 7:34:31 PM
> Surya, you are assuming (incorrectly) that SV works in the
> same manner as C++ in *inferring* the "abstract" aspect of
> the class.  That isn't the case.  Even in the quote that
> you give, the text says "...the subclass needs to be abstract."
>
> The LRM is clear that the only way to define an abstract class
> is by saying "virtual class" so it follows that "virtual class"
> is required in the derived class as well as the base.
>
> This redundancy is, in my opinion, a good thing since it ensures
> that the expected abstract/non-abstract state of the class can
> be checked by the *type* specification alone as opposed to having
> to wait until one sees a "new" before flagging the error.
>
> Gord
>
>
>
> Surya Pratik Saha wrote:
>> Hi,
>> Though I don't have the access to draft LRM, but by reading the SV 
>> mails, I came to know SV 2009 is going to support something called 
>> pure virtual function inside class similar to C++ (i.e. there will no 
>> body for the virtual function which is declared with 'pure' keyword). 
>> And also there is a LRM snippet :
>> *In general, if an abstract class has any virtual methods, all
>> of the methods must be overridden (and provided with a method body) 
>> for the subclass to be instantiated. If any virtual methods have no 
>> implementation, the subclass needs to be abstract.
>>
>> *So if we go by LRM, then any subclasses which does not have any body 
>> for the pure virtual function present in the base class, then that 
>> sub class too will be considered as abstract, i.e. this is also not 
>> allowed to be instantiated.
>>
>> Now, except one standard simulator, none yet support pure virtual 
>> function. And if we consider the following case:
>>
>> virtual class base;
>>     pure virtual function int f();
>> endclass
>>
>> class derived extends base;
>> endclass
>>
>> That simulator fails saying that the pure virtual function is not 
>> defined inside 'derived' class. I think this is an incorrect 
>> behaviour, as SV LRM as well as C++ LRM does not mention to give 
>> error, they mean just the class 'derived' then becomes abstract (can 
>> not be instantiated). And if we derive another class from this 
>> subclass where the body of the pure virtual function is there, then 
>> it should be fine.
>>
>> So the simulator must have a bug. Please can anyone comment on that.
>> -- 
>>
>> Regards
>> Surya
>>
>>
>> -- 
>> This message has been scanned for viruses and
>> dangerous content by *MailScanner* <http://www.mailscanner.info/>, 
>> and is
>> believed to be clean.
>




-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Tue Oct 7 08:58:06 2008

This archive was generated by hypermail 2.1.8 : Tue Oct 07 2008 - 08:58:54 PDT