带有类特定参数的c++虚方法

C++ virtual method with class specific parameter

本文关键字:c++ 方法 参数      更新时间:2023-10-16

你好,我有这样一个想法,但我不知道如何实现它。在我的程序中,我已经有了基类和一些派生类。

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();
}

现在我根据需要使用派生类或基类。

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

我想要的是在基类中有一些类型的类特定参数,这对于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或其他。这可能吗?最好的方法是什么?

你只需在基类中添加一个参数,子类将根据自己的值进行重置:

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;}
}