具有 class 个特定参数的 C++ 虚方法

C++ virtual method with class specific parameter

您好,我有这样的想法,但不知道如何实现。在我的程序中,我已经有了 Base class,很少有派生的 classes.

base.hpp
BaseClass {
 public:
   BaseClass();
   virtual int getSomething(int param);
}

base.cpp
BaseClass::BaseClass(){};
int BaseClass::getSomething(int param)
{
  return param * 5;
}

derived1.hpp
DerivedClass1 : public BaseClass {
 public: 
  DerivedClass1();
}

derived2.hpp
DerivedClass2 : public BaseClass {
 public: 
  DerivedClass1();
}

现在我根据需要使用 Derived 或 Base classes。

BaseClass *c = (BaseClass *) new DerivedClass1;
cout << c->getSomething(5);

我想要的是在基 class 中有某种类型的 class 特定参数,这对于 DerivedClass1 和 DerivedClass2 是不同的。这是一个例子,它看起来像什么。

base.hpp
BaseClass {
 public:
  BaseClass();
  virtual int getSomething(int param);
}

base.cpp
BaseClass::BaseClass(){};
int BaseClass::getSomething(int param)
{
  return param * CLASS_SPECIFIC_PARAM;
}

然后对于 DerivedClass1,此 CLASS_SPECIFIC_PARAM 将为 5,对于 DerivedClass2 将为 6 或其他。 这甚至有可能做到吗?执行此操作的最佳方法是什么?

您只需将一个参数添加到您的基础 class,子项将根据自己的值重置:

base.hpp

BaseClass {
 public:
   BaseClass() : m_param(0) {};
   virtual int getSomething(int param);
 protected:
   int m_param;
}

derived1.hpp

DerivedClass1 : public BaseClass {
 public: 
  DerivedClass1() : m_param(5) {};
}

derived2.hpp

DerivedClass2 : public BaseClass {
 public: 
  DerivedClass1() : m_param(6) {};
}

PS: 并为你的 BaseClass

添加一个虚拟析构函数

替代方案是虚拟(或纯虚拟函数)而不是受保护的成员。

BaseClass {
 public:
   BaseClass();
   virtual int getSomething(int param);
 protected:
   virtual int getClassSpecific() const =0;
}
//...
BaseClass::BaseClass(){};
int BaseClass::getSomething(int param)
{
  return param * getClassSpecific();
}

//...
DerivedClass1 : public BaseClass {
 //...
 virtual int getClassSpecific() const { return 5;}
}

//.....
DerivedClass2 : public BaseClass {
 //...
 virtual int getClassSpecific() const { return 6;}
}