Сцена, подобная этой:
У меня разные объекты выполняют аналогичную операцию, что и соответствующие функции func ().
Существует 2 вида решения для func_manager () для вызова func () в соответствии с различными объектами
Решение 1 : Использовать символ виртуальной функции, указанный в c ++. func_manager работает по-разному, в соответствии с различными проходами точек объекта.
class Object{
virtual void func() = 0;
}
class Object_A : public Object{
void func() {};
}
class Object_B : public Object{
void func() {};
}
void func_manager(Object* a)
{
a->func();
}
Решение 2 : Используйте простой переключатель / чехол. func_manager работает по-разному в соответствии с проходом другого типа в
typedef enum _type_t
{
TYPE_A,
TYPE_B
}type_t;
void func_by_a()
{
// do as func() in Object_A
}
void func_by_b()
{
// do as func() in Object_A
}
void func_manager(type_t type)
{
switch(type){
case TYPE_A:
func_by_a();
break;
case TYPE_B:
func_by_b();
default:
break;
}
}
Мой вопрос 2:
1. с точки зрения ДИЗАЙН-ШАБЛОН , какой из них лучше?
2. с точки зрения ЭФФЕКТИВНОСТИ НАКОНЕЦ , какой из них лучше? В частности, по мере того, как увеличивается количество видов объектов, может быть до 10-15, какие накладные расходы превышают другие? Я не знаю, как внутри switch / case реализуется, просто куча if / else?
Большое спасибо!