具有 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;}
}
您好,我有这样的想法,但不知道如何实现。在我的程序中,我已经有了 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;}
}