我有一个类模板,其中一些方法被定义为虚拟的,以使我的类的用户能够在他的派生类中为他们提供实现。请注意,在我的模板类中,有一些使用虚拟类的非虚拟方法(应该返回值的虚拟类在非虚拟类中调用)。覆盖C++的虚拟方法
你可以给我一个正确的代码,其中父类的虚拟方法应该返回一个值(但它的实现是在一个子类中提供的)和父类中的虚方法返回的值的简单示例用于该类的其他方法。因为我看到某处(例如:Safely override C++ virtual functions),这可能会导致一些问题,用户定义的方法将会注意覆盖父类的虚方法。
注意:我使用g ++编译器对Code :: Blocks进行编程。
编辑:这里要求的我想要的一个简单的例子:)
template<typename T>
class parent {
public:
// Public methods that user can call
int getSomething(T t);
void putSomething(T t, int x);
// public method that user should implement in his code
virtual float compute(T t) { }
// protected or private methods and attributes used internally by putSomething ...
float doComplexeThings(...); // this can call
};
的方法计算(应该由用户(子类)来实现。但是,此方法compute()由putSomething()和doComplexeThings()来调用。
对于您所描述的内容,可能不需要虚拟方法(静态多态性可能适用于您) - 难以根据您的描述进行分析。请发布您写的示例代码,以便我们更清楚地知道您正在尝试做什么。 – kfmfe04
链接问题中的示例是关于您认为是重写的内容,但实际上由于错误而声明了重载,例如,常量丢失,并不是关于返回值。你认为危险到底是什么? – CashCow
在经典的模板代码中,您甚至不需要声明“虚拟浮点计算(T t)”。如果你有一个实例的句柄,你可以通过't.compute()'在putSomething()和doComplexeThings()中简单地使用它(调用它)。如果你的类T没有实现compute,编译器会报错。这样,父母和T实际上甚至不必生活在相同的继承层次中:即T是不需要父母关系的孩子。这样做也可以给你一个给父母一个更有意义的名字的机会(因为这是一种关系是不必要的)。 – kfmfe04