タイトルがわかりにくい言葉になってて申し訳ないです。
実際の処理とは違うのですが、

class Parent
{
protected:
    int max = 10;

public:
    void func()
    {
        for (int i = 0; i < max; i++)
        {
            printf("文字列");
        }
    }
};

class Child : public Parent
{
    int max = 20;
};

のような処理を書いた場合に、このヘッダ(実際にはヘッダとソースで分けてあるので)をincludeし、

Child hoge;
hoge.func()

のような処理をした場合、Childのmaxは無視され、Parentが本来もっているmaxが使われます。
処理自体はParentと同じ、ただ同じ名前・同じ型の変数のChildで持っている変数を使わせて処理を行いたい、という場合はどうすればいいのでしょうか?