接口和子类

时间:2012-10-31 13:18:02

标签: c++ interface derived

在C ++中,我有一个类 FooA 和一个类 FooB ,它们都是基类 Foo 的子类。 FooB必须实施interface 。如果我只有一个指向FooB的Foo指针并且希望使用FooB的Bar方法,我将不得不进行强制转换。但是,这似乎违反了polymorphism

我想知道是否有更好的方法允许FooB实现Bar接口而不强制所有Foo派生类也实现Bar。

2 个答案:

答案 0 :(得分:2)

重新设计课程。遗产不是你需要的。

基本原理:如果某处有Foo指针,那么它的所有者不应该知道它是指向Foo对象还是FooB或任何其他派生对象 - 它只是使用Foo功能,不了解实现。 (这就是多态性的一般工作方式。)

换句话说:如果你有一个Foo指针而且它的用户只依赖于FooB中的功能,那么该指针首先应该是FooB类型。

答案 1 :(得分:0)

如果你只想使用Foo指针,并调用Bar方法,Foo必须实现Bar接口。这是让你的编译器知道Foo对象可以使用这个方法的唯一方法,当然没有强制转换。