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

时间:2016-09-27 08:31:00

标签: c++ object methods virtual

嗨,我心中有这样一个想法,但我不知道如何实现它。在我的程序中,我已经有了Base类,并且很少有派生类。

{% extends 'ProfileBundle::base.html.twig' %}

{% block stylesheets %}
    {{ parent() }}
    <link href="..."/>
{% endblock %}

{% if modal is not defined %}
    {% use 'ProfileBundle::navigation.html.twig' %}
    {% use 'ProfileBundle::footer.html.twig' %}
{% endif %}

{% block main %}
{% endblock %}

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

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

我想要的是在基类中使用某种类特定于类的参数,这对于DerivedClass1和DerivedClass2会有所不同。这是一个例子,它看起来如何。

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

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

2 个答案:

答案 0 :(得分:1)

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

<强> 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

中添加虚拟析构函数

答案 1 :(得分:1)

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

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