J'ai créé la classe System Verilog avec mot clé virtuel. Après avoir ajouté le mot-clé virtuel sous forme de préfixe en classe ABC, il devient une classe abstraite pour laquelle l'objet ne peut pas être créé à l'aide de nouveau () constructeur.IF DO ainsi que l'utilisateur reçoit une erreur de compilation. P>
classe virtuelle ABC; ........ Endclass P>
Mais en même temps, aucune autre classe ne peut être prolongée de la classe ABC en tant que sous-classe. I.E. La classe ABC ne peut pas être étendue à une sous-classe. P>
SV prend en charge un tel type de classe qui ne peut pas être créé à l'aide de nouveau () constructeur (comme une classe abstraite) et ne peut pas être étendu à une sous-classe. Si System Verilog prend en charge un tel type de classe, dans quel scénario il sera utile de définir cette classe. P>
Toute entrée sera une bonne aide. P>
3 Réponses :
Je ne comprends pas complètement ce que vous voulez dire. Oui, vous pouvez déclarer une classe abstraite (virtuelle), vous pouvez l'étendre dans n'importe quelle autre classe. Pourquoi avez-vous dit que vous ne pouvez pas?
Voici un exemple rapide: p> y code> est une classe dérivée et vous pouvez faciliter la tâche en extension de la classe
x code> p> p>
Dans la requête postée, je voulais comprendre, est-ce possible dans SV, l'utilisateur déclarer une classe, objet créé à une seule fois, lorsque vous avez essayé de l'étendre dans n'importe quelle sous-classe reçoit une erreur. Dave_59 et Tudor Timi répondaient et ont clarifié ma compréhension de la fonction locale nouvelle et de son utilisation. Merci pour l'entrée @ Serge
Vous êtes incorrect sur A ne pouvant pas être capable d'étendre une classe virtuelle / abstraite. Vous doit em> étendre l'ordre pour la construire comme sous-classe dérivée. Vous obtiendrez une erreur si vous essayez de construire une classe virtuelle. SystemVerilog n'a pas de mécanisme qui vous empêche de EM> de toute classe, mais il a un moyen de vous empêcher de construire construire em> toute extension d'une classe en déclarant le constructeur comme maintenant le constructeur local code>. Si vous faites cela, vous devez fournir une autre méthode statique pour appeler le constructeur local. C'est typiquement utilisé dans ce qu'on appelle le modèle singleton em>. P>
A code> est appelé. Une fois, et que vous ne pouvez pas construire une sous-classe étendue de
A code> .it.
Merci à Dave_59 pour clarifier, je cherchais une fonction locale nouvelle, mais ne pouvait pas mettre la requête en mots.
Je suppose que vous souhaitez utiliser la classe uniquement pour As @ Dave_59 Déjà dit, vous pouvez déclarer le constructeur Cela provoquera une erreur de compiler lorsque vous essayez de l'instancier: p> Il provoquera également une erreur de compilation si vous étendre la classe. C'est parce que toute sous-classe appelle implicitement statique code> statique.
local code>: p>
super.new () code>, qui est illégale, car
super.new code> est
local code>: p>
Merci Tudor TIMI pour clarifier le fonctionnement de la fonction locale nouvelle dans la classe de base et illégale Super.New () dans sa classe prolongée.