What is the purpose of using the reserved word virtual in front of functions? If I want a child class to override a parent function, I just declare the same function such as void draw(){}
.
class Parent { public: void say() { std::cout << "1"; } }; class Child : public Parent { public: void say() { std::cout << "2"; } }; int main() { Child* a = new Child(); a->say(); return 0; }
The output is 2.
So again, why would the reserved word virtual
be necessary in the header of say()
?
Thanks a bunch.
The virtual keyword can be used when declaring overriding functions in a derived class, but it is unnecessary; overrides of virtual functions are always virtual. Virtual functions in a base class must be defined unless they are declared using the pure-specifier.
So the general advice is, Use virtual for the base class function declaration. This is technically necessary. Use override (only) for a derived class' override.
You cannot override a non-virtual or static method. The overridden base method must be virtual , abstract , or override . An override declaration cannot change the accessibility of the virtual method. Both the override method and the virtual method must have the same access level modifier.
Solidity lets developers change how a function in the parent contract is implemented in the derived class. This is known as function overriding. The function in the parent contract needs to be declared with the keyword virtual to indicate that it can be overridden in the deriving contract.
If the function were virtual, then you could do this and still get the output "2":
Parent* a = new Child(); a->say();
This works because a virtual
function uses the actual type whereas a non-virtual function uses the declared type. Read up on polymorphism for a better discussion of why you'd want to do this.
Try it with:
Parent *a = new Child(); Parent *b = new Parent(); a->say(); b->say();
Without virtual
, both with print '1'. Add virtual, and the child will act like a Child, even though it's being referred to via a pointer to a Parent
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With