[ C ] design pattern
发表于 : 2020年05月11日 11:58
依賴 GCC extension, 非標準C語言。
支援 簡單的 class, private, extends, interface, abstract class, polymorphism.
支援 簡單的 class, private, extends, interface, abstract class, polymorphism.
设计模式rubyish 写了:依賴 GCC extension, 非標準C語言。
代码: 全选
/* gcc version 9.2.0 (GCC) */
#include <stdio.h>
#include <stdlib.h>
#include "..."
interface(Flyable) {
void (*fly)(void);
};
interface(Quackable) {
void (*quack)(void);
};
abstract class(Duck) {
void (*set_flyable)(Flyable*);
void (*set_quackable)(Quackable*);
void (*fly)(void);
void (*quack)(void);
private(Duck);
Flyable* flyable;
Quackable* quackable;
abstract void (*display)(void);
};
// SuperFly
Class(SuperFly) { implements(Flyable); };
void SuperFly_fly(void) { puts("I'm super flying!"); }
__new__(SuperFly) { meth(SuperFly, fly); }
// SuperQuack
Class(SuperQuack) { implements(Quackable); };
void SuperQuack_quack(void) { puts("I'm super quacking!"); }
__new__(SuperQuack) { meth(SuperQuack, quack); }
// impl Duck
void Duck_set_flyable(Flyable* fly) {
is(Duck);
this->flyable = fly;
}
void Duck_set_quackable(Quackable* quack) {
is(Duck);
this->quackable = quack;
}
void Duck_fly(void) {
is(Duck);
$(this->flyable).fly();
}
void Duck_quack(void) {
is(Duck);
$(this->quackable).quack();
}
__new__(Duck) { meth(Duck, set_flyable, set_quackable, fly, quack); }
// super duck
Class(SuperDuck) { extends(Duck); };
void SuperDuck_display(void) { puts("I'm super duck!"); }
__new__(SuperDuck) {
super(Duck);
meth(SuperDuck, display);
}
/* m a i n */
__main__(void) {
my duck = new (SuperDuck);
my fly = new (SuperFly);
my quack = new (SuperQuack);
$(duck).set_flyable(fly);
$(duck).set_quackable(quack);
$(duck).fly();
$(duck).quack();
$(duck).display();
}
523066680 写了:设计模式rubyish 写了:依賴 GCC extension, 非標準C語言。
(以前有段时间你只发英文,是和工作使用的系统有关吗?