2013-12-16 207 views
0

我有类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?*/ 
     } 

} 
+0

你可以修复你的格式,使其可读? – Chad

+1

通过限定名称:'i2.Signal :: zeroPadding(i1);'限定名称告诉在哪里查找函数。 'i1'会自动通过[slicing]转换成'Shape'(http://stackoverflow.com/questions/274626/what-is-the-slicing-problem-in-c)。你的代码很奇怪,至少可以说。你为什么要在函数中复制'this'? – jrok

+0

我相信你可以'static_cast &>(i2).zeroPadding(i1);'也。请参阅:http://ideone.com/ej1C1T – Chad

回答

0

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

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

要呼叫Signal<T>::zeroPaddingImage<T>::zeroPadding,前者将需要至少有保护的知名度。

+0

我没有放在这里,但在代码信号 :: zeroPadding是公开的。 – user3094708

+0

我得到了错误错误错误LNK2019:函数“public:”中引用了无法解析的外部符号“public:__thiscall Signal ::〜Signal (void)”(?? 1?$ Signal @ H @@ QAE @ XZ) __thiscall图像 ::〜图像(void)“(?? 1?$ Image @ H @@ QAE @ XZ) – user3094708

+0

我有这个错误行if(getHeight()== im2.getHeight())因为getHeight )是Signal类中的函数,im2是类Image的对象因此转换不起作用。但主要我没有错误。为什么? int main(){ \t Image * a = new Image (2,3); \t图片 * b = new图片(1,3); \t(* a).getWidth(); (* a).getHeight(); //这里我得到了3没有错误 \t(* a).zeroPadding(* b); //这里我得到了2没有错误 \t } – user3094708

相关问题