【发布时间】:2016-04-12 11:52:11
【问题描述】:
我必须设计一个类的层次结构,例如:
class Animal{
speak();
name();
toString();
...
}
class Dog : public Animal {
...;
}
我可以选择是否像这样实现它们:
class Animal{
virtual speak() = 0;
virtual name() = 0;
virtual toString() = 0 ;
...
}
class Dog : public Animal {
speak(){ ... }
name(){ ... }
toString(){ ... }
}
或者,使用指向函数和 lambdas 的指针...像这样:
class Animal{
speak( s(); );
name( n(); );
toString( t(); );
...
protected:
std::function<...> s();
std::function<...> n();
std::function<...> t();
}
class Dog : public Animal {
Dog(){
s() = ...;
n() = ...:
t() = ...:
}
}
但是,在第二种情况下,基类不会是抽象的,我不确定这是否是个好主意... 第二种情况是一个非常无用的实现吗? 你能解释一下为什么吗?
【问题讨论】:
-
您的第一个场景也不代表抽象类?
-
我应该把函数变成纯虚拟的......不是吗?
-
当然,如果你想要一个抽象类。
-
我已经修改了帖子。你能解释一下这两种实现带来的差异吗?
标签: c++ function inheritance lambda