简化了重载的类函数

时间:2013-10-11 14:49:06

标签: c++ overloading

我在我的班级gTexture中声明了两个函数:

public:
                               gTexture():mActiveTexture(0){...}
   virtual void                DrawTexture();
   virtual void                DrawTexture(unsigned short int TextureNumber);
           int                 mActiveTexture;

,其中

void gTexture::DrawTexture()
    {
    gTexture::DrawTexture(mActiveTexture);
    }

我希望在一个函数中使用

virtual void                DrawTexture(unsigned short int TextureNumber=mActiveTexture);

由于mActiveTexture无效使用非静态数据成员,因此无法编译。有没有办法只有一个函数,这将使我更容易处理我的派生对象?感谢。

3 个答案:

答案 0 :(得分:1)

我可以看到两种方式。两者都是解决方法,但可能有用。

一个是使无参数函数非虚拟;它将始终使用mActiveTexture调用第二个。

另一种方法是使用领域知识(特别是0不是有效的OpenGL纹理名称的事实)并执行此操作:

virtual void DrawTexture(unsigned short int TextureNumber = 0) {
  if (TextureNumber == 0) TextureNumber = mActiveTexture;
  // ... rest of the code
}

答案 1 :(得分:0)

您可以使用无效的默认参数值(例如-1)。然后你的函数可以检查该值是否为默认值,如果是,则使用mActiveTexture,否则它将使用该参数。

答案 2 :(得分:0)

不,您不能将成员用作默认值。默认值在编译时使用。

然而,您可以使用特殊值作为默认值,例如-1,如果输入值为-1,则检查DrawTexture,如果是,则将其设置为mActiveTexture。