接口类
使用接口对行为进行描述,这些行为被所有继承自接口的类所遵循。接口类并不会执行任何函数,这就意味着这种类仅包含对函数的声明。必须使用派生类才能执行接口类函数。
使用接口提供多形态。即数个类可对同一个接口函数通过不同的方法进行操作。
接口类
接口类的声明与UnigineScript中其它类的声明一样。 在此示例中,使用虚拟抽象函数声明。
class Interface {
// 声明函数
void update() = 0;
//...;
}
所有继承自Interface的类必须包括对函数的实施方法。例如:
class Bar : Interface {
// 执行用于Bar的接口函数
void update() {
log.message("Bar::update(): called\n");
}
};
class Baz : Interface {
// 执行用于Baz的接口函数
void update() {
log.message("Baz::update(): called\n");
}
};
示例
试想存在一个对对象进行描述的接口类:
class Interface {
void update() = 0;
}
Bar和Baz 类描述了两种不同的对象。这两种类继承自Interface类且 Bar类派生自Foo类。
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");
}
};
使用此接口对不同类型的对象进行迭代,这些类型的对象执行对此接口的操作。因此可创建一个对象数组并将对象进行更新。
Interface interfaces[0];
interfaces.append(new Bar());
interfaces.append(new Baz());
foreach(Interface i; interfaces) {
i.update();
}
Bar::update(): called
Baz::update(): called
抽象虚拟函数声明
虚拟函数也是一种函数,可在派生类中将此函数覆盖。
如果某个用户类继承自其它类,那么两种类都自动支持虚拟方法。
可通过下列方式(C++风格)声明虚拟函数:
class Foo {
void foo() = 0;
};
也可使用virtual关键字声明虚拟函数,但此为可选选项。
最新更新: 2018-08-10
Help improve this article
Was this article helpful?
(or select a word/phrase and press Ctrl+Enter)