@shraddha_pawankar Date: 31/07/23
ABSTRACT CLASS
1) Abstract class cannot be instantiated
2) To keep program organized and understandable,it forms a group of classes
3) If we attempt to create an object of virtual class,which leads to compilation error
because it cant be instantiated.
Example:
virtual class AbstractClass;
virtual function void abstractMethod();
endfunction
endclass
Que 1) How do you declare an abstract class in SystemVerilog?
we declare an abstract class using the virtual keyword in combination with the class
keyword.
Que 2) Can you instantiate an abstract class directly? Why or why not?
No we cant instantiate directly because it is incomplete, containing abstract methods
without implementations.
Que 3) What is the purpose of having abstract classes in SystemVerilog?
Abstract classes allow you to define common functionality and interfaces that must be
implemented by derived classes,
Que 4) How do you define abstract methods within an abstract class?
Using pure virtual keyword
virtual class AbstractClass;
virtual function void abstractMethod();
endfunction
endclass
Que 5) Can an abstract class have non-abstract methods?
Yes, an abstract class can have both abstract and non-abstract methods.
Example:
@shraddha_pawankar Date: 31/07/23
// abstract class with abstract
methods//
virtual class parent; //abstract class
bit[3:0] addr;
int data;
virtual function void display(); //abstract methods
$display("Parent : addr=%0d data=%0d",addr,data);
endfunction
endclass
class child extends parent;
function void display();
$display("Child: addr=%0d data=%0d",addr,data);
endfunction
endclass
module tb;
initial
begin
child c;
parent p;
c=new();
c.addr=3;
c.data=4;
c.display();
end
@shraddha_pawankar Date: 31/07/23
endmodule
Output: # KERNEL: Child: addr=3 data=4
https://edaplayground.com/x/hnyE
Que 6) Can you have data members in an abstract class?
Yes,
Ex:
virtual class AbstractClass;
int myVariable; // data member
virtual function void Method();
endfunction
endclass
Que 7) How do you inherit from an abstract class in SystemVerilog?
You can inherit from an abstract class using the extends keyword.
Que 8) What is the difference between an abstract class and an interface in
SystemVerilog?
An abstract class can have both abstract and non-abstract methods, as well as data
members.
An interface, on the other hand, only contains method declarations, and it cannot have
data members or function implementations.
Ex:
interface MyInterface;
virtual function void interfaceMethod();
endinterface
virtual class AbstractClass;
virtual function void abstractMethod();
endfunction
@shraddha_pawankar Date: 31/07/23
function void nonAbstractMethod();
$display("This is a non-abstract method.");
endfunction
endclass
Que 9) Can an abstract class have a constructor?
Yes,abstract class have a constructor
Ex:
virtual class parent;
bit[3:0] addr_1;
//abstract method
virtual function void method();
endfunction
endclass
class child extends parent;
//constructor
function new(int addr);
addr_1=addr;
endfunction
//overriding extract method
virtual function void method();
$display("addr_1=%0d",addr_1);
endfunction
endclass
@shraddha_pawankar Date: 31/07/23
module tb;
initial
begin
child c=new(3);
c.method();
end
endmodule
Output: # KERNEL: addr_1=3
https://edaplayground.com/x/e2WX
NOTE:
abstract classes cannot be directly instantiated, so they cannot have a
constructor like regular classes.
However, we can still have constructors in Child classes that extend
the abstract class.
--------------------------------------------------------------------------------------------------
Que 10) How do you implement an abstract class with parameterized methods?
You can use parameterized methods in an abstract class like in any regular class.
Que 11) How can you implement multiple inheritance with abstract classes?
In SystemVerilog, a class can inherit from multiple abstract classes.
Ex:
virtual class AbstractClass1;
virtual function void abstractMethod1();
endfunction
endclass
virtual class AbstractClass2;
virtual function void abstractMethod2();
@shraddha_pawankar Date: 31/07/23
endfunction
endclass
class ConcreteClass extends AbstractClass1, AbstractClass2;
virtual function void abstractMethod1();
$display("Implementation of abstractMethod1");
endfunction
virtual function void abstractMethod2();
$display("Implementation of abstractMethod2");
endfunction
endclass
module tb;
initial
begin
concreteclass c=new();
c.abstractMethod1();
c.abstractMethod2();
end
endmodule
Que 12) What is the purpose of making a method virtual in an abstract class?
By making a method virtual in an abstract class, you allow derived classes to override that
method, providing their own implementation.
Que 13) Can you have a static method in an abstract class?
Yes, you can have static methods in an abstract class.
virtual class parent; //abstract class
static bit[3:0] addr; //static properties
static int data;
@shraddha_pawankar Date: 31/07/23
static function void display(); //static methods
$display("Parent : addr=%0d data=%0d",addr,data);
endfunction
endclass
class child extends parent;
function void display();
$display("Child: addr=%0d data=%0d",addr,data);
endfunction
endclass
module tb;
initial
begin
child c;
parent p;
c=new();
c.addr=3;
c.data=4;
c.display();
end
endmodule
Output: # KERNEL: Child: addr=3 data=4
https://edaplayground.com/x/9TKW
Que 14) How do you override an abstract method in a concrete class(child class)?
In a concrete class, you provide an implementation for the abstract method with the
same name and signature as the one in the abstract class.
@shraddha_pawankar Date: 31/07/23
Que 15) Can you have a pure virtual method in SystemVerilog (similar to C++)?
No, SystemVerilog does not have pure virtual methods like C++. All abstract methods are
implicitly pure virtual, meaning they don't have an implementation.
Que 15) Is it possible to have an abstract class without any methods?
Yes it is possible
Ex:
virtual class parent; //abstract class
bit[3:0] addr;
int data;
endclass
class child extends parent;
function void display();
$display("Child: addr=%0d data=%0d",addr,data);
endfunction
endclass
module tb;
initial
begin
child c;
parent p;
c=new();
c.addr=3;
c.data=4;
c.display();
end
endmodule
Output: # KERNEL: Child: addr=3 data=4
@shraddha_pawankar Date: 31/07/23
https://edaplayground.com/x/Y92i
Que 16) How do you use an abstract class to define a common interface for
multiple classes?
By creating an abstract class with abstract methods, you define a common interface that
derived classes must implement.
Ex:
virtual class Shape;
virtual function void draw();
endfunction
endclass
class Circle extends Shape;
virtual function void draw();
$display("Drawing a Circle");
endfunction
endclass
class Square extends Shape;
virtual function void draw();
$display("Drawing a Square");
endfunction
endclass
Que 17) How do you achieve polymorphism with abstract classes?
Polymorphism is achieved when different classes implement the same abstract method in
their unique ways
Que 18) How do you access data members in an abstract class from a derived class?
You can access data members in the abstract class directly from a derived class if they
have sufficient access privileges (e.g., protected or public).
Que 19) Can you have private methods in an abstract class?
Ex:
@shraddha_pawankar Date: 31/07/23
virtual class AbstractClass;
private function void privateMethod();
$display("This is a private method.");
endfunction
virtual function void abstractMethod();
endfunction
endclass
Que 20) Can you have default method implementations in an abstract class?
No, abstract methods must not have any implementation in the abstract class. Default
implementations are only allowed in non-abstract classes.
Que 21) How do you declare a constant variable in an abstract class?
Using const keyword
Ex:
virtual class parent; //abstract class
bit[3:0] addr; // non constant variable
const int data=2; //constant variable(global constant)
virtual function void display(); //private methods
$display("Parent : addr=%0d data=%0d",addr,data);
endfunction
endclass
class child extends parent;
function void display();
$display("Child: addr=%0d data=%0d",addr,data);
endfunction
endclass
@shraddha_pawankar Date: 31/07/23
module tb;
initial
begin
child c;
parent p;
c=new();
c.addr=3;
//c.data=4; // ERROR VCP5087 "Value cannot be assigned to global constant class
property."
c.display();
end
endmodule
https://edaplayground.com/x/CDHt
Que 22) What is the purpose of declaring a method as extern in an abstract class?
In SystemVerilog, the extern keyword is not used in abstract classes. It is used in interface
declarations to indicate that the method is defined outside the interface.
Que 23) Can you use an abstract class as a type for function arguments or return
values?
Yes, you can use an abstract class as a type for function arguments or return values.
Ex:
virtual class AbstractClass;
virtual function void abstractMethod();
endfunction
endclass
function void someFunction(AbstractClass obj);
// Function implementation
endfunction
@shraddha_pawankar Date: 31/07/23
function AbstractClass anotherFunction();
// Function implementation
Endfunction
Que 24) How do you handle class instantiation and method calls for classes that
inherit from an abstract class?
You can create objects of concrete classes that inherit from an abstract class and call
methods on those objects as usual.
Que 25) How do you handle method overloading in abstract classes?
Ex:
virtual class AbstractClass;
virtual function void myMethod();
$display("AbstractClass myMethod()");
endfunction
virtual function void myMethod(int param);
$display("AbstractClass myMethod(%d)", param);
endfunction
endclass
Que 26) Can you declare an abstract class as final ?
No, you cannot declare an abstract class as final . The final keyword is used to indicate
that a concrete class cannot be further derived.
Que 27) What is the role of the virtual keyword in abstract classes?
The virtual keyword is used to indicate that a method or class is incomplete and must
be overridden by derived classes.
Que 28) How do you create a class hierarchy using abstract classes?
You can create a class hierarchy by having multiple classes inherit from an abstract class.
virtual class Animal;
virtual function void makeSound();
endfunction
endclass
@shraddha_pawankar Date: 31/07/23
class Dog extends Animal;
virtual function void makeSound();
$display("Woof!");
endfunction
endclass
class Cat extends Animal;
virtual function void makeSound();
$display("Meow!");
endfunction
endclass
Que 29) How do you handle access specifiers for methods in an abstract class?
You can use access specifiers (private , protected, public ) to control the visibility and
accessibility of methods in an abstract class.
Que 30) Can an abstract class have static data members?
Yes, an abstract class can have static data members.
Ex:
virtual class AbstractClass;
static int staticVariable; // static data members
virtual function void abstractMethod();
endfunction
endclass
Que 31) Can an abstract class extend another abstract class?
Yes, an abstract class can extend another abstract class.
Ex:
virtual class AbstractClass1;
virtual function void abstractMethod1();
endfunction
@shraddha_pawankar Date: 31/07/23
endclass
virtual class AbstractClass2 extends AbstractClass1;
virtual function void abstractMethod2();
endfunction
endclass
Que 32) How do you ensure all abstract methods are implemented in derived
classes?
By making the abstract methods virtual in the abstract class, you ensure that derived
classes must override and provide implementations for those methods.
Que 33) Can you have virtual data members in an abstract class?
No, virtual data members are not supported in SystemVerilog.
Ex:
virtual class parent; //abstract class
virtual bit[3:0] addr;
virtual int data;
virtual function void display(); //private methods
$display("Parent : addr=%0d data=%0d",addr,data);
endfunction
endclass
class child extends parent;
function void display();
$display("Child: addr=%0d data=%0d",addr,data);
endfunction
endclass
module tb;
initial
@shraddha_pawankar Date: 31/07/23
begin
child c;
parent p;
c=new();
c.addr=3;
c.data=4;
c.display();
end
endmodule
Que 34) What is the significance of the this keyword in the context of abstract
classes?
The this keyword is used to refer to the current object within a class. In abstract classes,
it is used similarly to regular classes.
Que 35) Can an abstract class have a protected method?
Yes, an abstract class can have protected methods.
Ex:
virtual class AbstractClass;
protected function void myProtectedMethod();
// Method implementation
endfunction
virtual function void abstractMethod();
endfunction
endclass
--------------------------------------------------------------------------------------------------