嗨,我心中有这样一个想法,但我不知道如何实现它。在我的程序中,我已经有了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或其他。 这甚至可能吗?这样做的最佳方法是什么?
答案 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;}
}