-1
votes

Type de classe dans le système Verilog qui ne peut pas être construit et étendu en tant que classe

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.

classe virtuelle ABC; ........ Endclass

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.

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.

Toute entrée sera une bonne aide.


0 commentaires

3 Réponses :


0
votes

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: xxx

y est une classe dérivée et vous pouvez faciliter la tâche en extension de la classe x


1 commentaires

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



1
votes

Vous êtes incorrect sur A ne pouvant pas être capable d'étendre une classe virtuelle / abstraite. Vous doit é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 de toute classe, mais il a un moyen de vous empêcher de construire construire toute extension d'une classe en déclarant le constructeur comme local . 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 . xxx

maintenant le constructeur A est appelé. Une fois, et que vous ne pouvez pas construire une sous-classe étendue de A .it.


1 commentaires

Merci à Dave_59 pour clarifier, je cherchais une fonction locale nouvelle, mais ne pouvait pas mettre la requête en mots.



1
votes

Je suppose que vous souhaitez utiliser la classe uniquement pour statique statique.

As @ Dave_59 Déjà dit, vous pouvez déclarer le constructeur local : xxx

Cela provoquera une erreur de compiler lorsque vous essayez de l'instancier: xxx

Il provoquera également une erreur de compilation si vous étendre la classe. C'est parce que toute sous-classe appelle implicitement super.new () , qui est illégale, car super.new est local : xxx


1 commentaires

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.