请查看此代码。它只反映了我想要做的基本概念:
#include <iostream>
using namespace std;
class Base
{
public:
Base()
{
/* Some code I want to reuse */
Redefined();
}
virtual ~Base() {}
void Redefined() { val = 10; }
int val;
};
class Derived : public Base
{
public:
Derived() : Base() {}
~Derived() {}
void Redefined() { val = 25; }
};
int main()
{
Base* check = new Derived();
cout << check->val << endl;
system("pause");
return 0;
}
我希望val
对象的check
属性为25而不是10。
如你所见,我有两节课。 Base
类构造函数有一些复杂的功能,我希望Derived
类在它的构造函数中也有。如何更改派生函数Redefined
,以便我不必完全重写Derived
构造函数(实际上只是复制粘贴整个基类构造函数代码并替换一行代码 - 更新版本Redefined
函数)?
答案 0 :(得分:2)
你无法真正覆盖这种功能。通常情况下,您可以使用虚函数,但这在构造函数中不会按照您想要的方式工作。
更好的方法是将您想要的值传递给Base
构造函数:
class Base
{
public:
Base(int init_val = 10)
{
/* Some code I want to reuse */
val = init_val;
}
virtual ~Base() {}
int val;
};
class Derived : public Base
{
public:
Derived() : Base(25) {}
~Derived() {}
};
这样任何派生类都可以将其选择的值传递给基类。
答案 1 :(得分:0)
根据上述评论:
我实际上认为正确的解决方案是拥有一个“接口”类型的基类(即具有纯虚函数的基类,并且派生类实际上实现了正确的行为),然后让每个类处理构造它自己的DirectX缓冲区。您可能会发现,您需要2-3个不同的派生类,它们以不同的方式构造缓冲区,然后从实际执行实际工作的类派生。我希望这是有道理的。
或者,您将足够的参数传递给基类,以便可以构造缓冲区。但我认为第一个建议是更好的选择。