如何在基类函数的大小仅为派生类所知的情况下使用它

时间:2015-09-21 07:41:48

标签: c++ inheritance polymorphism

我想在使用派生类成员的基类中实现一个函数。因此,对于每个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!";
     };

2 个答案:

答案 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    
                }
        }
    }
}

Live demo

答案 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