Interface Class
An interface is used to describe a behaviour, which is followed by all of the classes deriving from the interface. An interface class does not implement any functionality. It means that such a class contains only functions declaration. Interface class functions must be implemented by derived classes.
The interface is used to provide a polymorphism. It means that several classes can implement the same interface functions in different ways.
Interface Class#
The interface class is declared as any other class in UnigineScript. In the example, the abstract virtual function declaration is used.
class Interface {
// functions declaration
void update() = 0;
//...;
}
Any class that is inherited from the Interface class must contain an implementation for its functions. For example:
class Bar : Interface {
// implementation of the interface function for Bar
void update() {
log.message("Bar::update(): called\n");
}
};
class Baz : Interface {
// implementation of the interface function for Baz
void update() {
log.message("Baz::update(): called\n");
}
};
Example#
Let's suppose that there is an interface class, which describes an object:
class Interface {
void update() = 0;
}
Bar and Baz classes decribe two different objects. This classes are inherited from the Interface class, and also the Bar class is derived from the Foo class.
class Foo {
void foo() = 0;
};
class Bar : Foo, Interface {
void update() {
log.message("Bar::update(): called\n");
}
};
class Baz : Interface {
void update() {
log.message("Baz::update(): called\n");
}
};
The interface is used to iterate objects of different types that implement that interface. So, you can create an array of the objects and update them all.
Interface interfaces[0];
interfaces.append(new Bar());
interfaces.append(new Baz());
foreach(Interface i; interfaces) {
i.update();
}
Bar::update(): called
Baz::update(): called
Abstract virtual function declaration#
A virtual function is a function, which can be overridden in a derived class.
You can declare the virtual function the following way (C++ style):
class Foo {
void foo() = 0;
};