在派生类的方法中从基类调用方法

时间:2013-12-16 21:41:51

标签: c++ inheritance overloading base derived

我有类Signal和Image,两个类都有相同名称但输入和输出参数不同的方法。是允许的吗?

  template <class T> class Signal {
    Signal<T> zeroPadding(Signal<T>);
    }

    template <class T> class Image:public Signal<T>
    {
    public:
    Image(void);
        ~Image(void);
        Image(int,int);
        Image(int,int,double);
        Image(int,int,double,double);
            Image<T> zeroPadding(Image<T>);

    template <class T> Image<T>::Image(int width,int height):Signal(width,height) {}

    template <class T> Image<T>::Image(int width,int height,double dt):Signal(width,height,dt) {}

    template <class T> Image<T>::Image(int width,int height,double dt,double t0 ):Signal(width,height,dt,t0) {}


    template <class T> Image<T> Image<T>::zeroPadding(Image<T> im2){
        Image<T> i1 =(*this);
        Image<T> i2 =im2;

        if (i1.getHeight()==im2.getHeight()){
            i2.zeroPadding(i1); /* I want to call zeroPadding function from class Signal<T>. How I can convert i1 and i2 to class Signal<T> without initialization?*/
        }

}

1 个答案:

答案 0 :(得分:0)

当然,基类和后代允许使用具有不同参数和返回类型的相同名称的方法。

要从后代的方法调用基类的函数,但是,基类的方法必须是可见。在问题的示例代码中,Signal<T>::zeroPadding是私有的,因此只有直接属于Signal<T>(及其朋友,但不一定是后代)的方法中的代码才能调用该函数。

要从Signal<T>::zeroPadding拨打Image<T>::zeroPadding,前者至少需要受保护的可见性。