类的层次结构,尝试在基础级别实现函数

时间:2016-01-07 22:16:50

标签: c++ function inheritance lambda

我必须设计一个类的层次结构,例如:

func applicationDidEnterBackground(application: UIApplication)
{
    UIApplication.dismissOpenAlerts()
}

我可以选择是否像这样实现它们:

class Animal{
  speak();
  name();
  toString();
...
}

class Dog : public Animal {
  ...;
}

或者,在指向函数和lambdas的指针中运行......像这样:

class Animal{
  virtual speak() = 0;
  virtual name() = 0;
  virtual toString() = 0 ;
...
}

class Dog : public Animal {
  speak(){ ... }
  name(){ ... }
  toString(){ ... }
}

但是,在第二种情况下,基类不是抽象的,我不确定这是个好主意...... 第二种情况是非常无用的实施吗? 你能解释一下为什么吗?

2 个答案:

答案 0 :(得分:0)

您正在寻找以下方法之间的选择:

第一种方法

class Animal{
  virtual speak() = 0;
  ...
};

class Dog : public Animal {
  speak(){ ... }
  ...
};

第二种方法

class Animal{
  speak( s(); );
  ...
protected:
  std::function<...> s();
  ...
};

class Dog : public Animal {
  Dog(){
    s() = ...;
    ...
  }
};

首选方法。

在第二种方法中,您正在实现您的虚拟函数调度版本,而不是让编译器为您执行此操作。

答案 1 :(得分:0)

第二种方法允许在运行中更改对象的行为。例如。你可以改变动物说话的方式(甚至在你实例化一个物体之后)。如果这就是你所拥有的,那么你是否需要为动物分开课程甚至是个问题。只需创建一个工厂。

如果你不需要这种灵活性,那肯定是一种过度杀伤并增加了复杂性,你应该只使用虚拟方法。