我想在使用派生类成员的基类中实现一个函数。因此,对于每个DerivedClass,我将拥有不同值的成员。
这是一个例子。 BaseClass
具有使用变量Foo()
的成员函数arrStr
。这个NUL终止的char数组的内容只能在派生类中找到。
如何让BaseClass
"知道"变量arrStr
不知道它的大小?这甚至可能吗?
class BaseClass
{
public:
BaseClass();
~BaseClass();
protected:
void Foo()
{
prtinf("%s\n", arrStr);
};
};
class DerivedClass : public BaseClass
{
public:
DerivedClass();
~DerivedClass();
protected:
char arrStr[] = "FooString!";
};
答案 0 :(得分:2)
在您在派生类中实现的基类中添加(纯)虚拟访问函数。
while(running)
{
while(SDL_PollEvent(&event)) // check to see if an event has happened
{
switch(event.type)
{
case SDL_QUIT:
running = false;
break;
case SDL_MOUSEBUTTONDOWN: // if the event is mouse click
if(event.mouse.x >= 100) // check if it is in the desired area
{
//do something
}
}
}
}
答案 1 :(得分:0)
如何让BaseClass“知道”变量arrStr而不知道它的大小?这甚至可能吗?
在调用Foo时将其作为参数插入:
class BaseClass
{
public:
virtual void Process() = 0;
protected:
void Foo(char* str) // <-- value inserted here as parameter
{
prtinf("%s\n", arrStr);
}
};
class DerivedClass : public BaseClass
{
public:
void Process() override
{
Foo(arrStr); // call in derived class, with derived value
}
protected:
char arrStr[] = "FooString!";
};
客户代码:
BaseClass * b = new DerivedClass;
b->Process(); // call Foo(arrStr) internally