C++ 类的层次结构,尝试在基础级别实现函数
我必须设计类的层次结构,例如:C++ 类的层次结构,尝试在基础级别实现函数,c++,function,inheritance,lambda,C++,Function,Inheritance,Lambda,我必须设计类的层次结构,例如: class Animal{ speak(); name(); toString(); ... } class Dog : public Animal { ...; } 我可以选择是否这样实施它们: class Animal{ virtual speak() = 0; virtual name() = 0; virtual toString() = 0 ; ... } class Dog : public Animal { sp
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(){ ... }
}
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() = ...:
}
}
或者,在指向函数和lambda的指针中练习。。。像这样:
class Animal{
virtual speak() = 0;
virtual name() = 0;
virtual toString() = 0 ;
...
}
class Dog : public Animal {
speak(){ ... }
name(){ ... }
toString(){ ... }
}
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() = ...:
}
}
类动物{
说话;
名称(n(););
toString(t(););
...
受保护的:
std::函数s();
std::函数n();
std::函数t();
}
犬类:公共动物{
狗(){
s()=。。。;
n()=…:
t()=…:
}
}
但是,在第二个场景中,基类不会是抽象的,我不确定这是否是一个好主意。。。
第二种情况是非常无用的实现吗?
你能解释一下为什么吗 您需要在以下方法中进行选择: 第一种方法
class Animal{
virtual speak() = 0;
...
};
class Dog : public Animal {
speak(){ ... }
...
};
class Animal{
speak( s(); );
...
protected:
std::function<...> s();
...
};
class Dog : public Animal {
Dog(){
s() = ...;
...
}
};
第二种方法
class Animal{
virtual speak() = 0;
...
};
class Dog : public Animal {
speak(){ ... }
...
};
class Animal{
speak( s(); );
...
protected:
std::function<...> s();
...
};
class Dog : public Animal {
Dog(){
s() = ...;
...
}
};
类动物{
说话;
...
受保护的:
std::函数s();
...
};
犬类:公共动物{
狗(){
s()=。。。;
...
}
};
我更喜欢第一种方法
在第二种方法中,您正在实现您的虚拟函数分派版本,而不是让编译器为您执行。第二种方法允许动态更改对象的行为。例如,你可以改变动物说话的方式(即使在你实例化了一个对象之后)。如果这就是你所拥有的一切,那么你是否需要为这些动物设置单独的课程就更值得怀疑了。创建一个工厂
如果您不需要这种灵活性,那么这肯定是一种过分的做法,增加了复杂性,您应该只使用虚拟方法。您的第一个场景也不代表抽象类?我应该让函数纯虚拟化。。。是吗?当然,如果你想要一个抽象类,我已经修改了帖子。你能给我解释一下这两种实现带来的差异吗?我认为第二种方法有点模棱两可。至少没有第一个。