从派生类访问基类成员时,强制使用范围解析运算符

时间:2010-10-08 07:58:04

标签: c++ visual-studio

我有一个Derived类,它是从类Base派生的。在Derived的函数中,我可以访问Base的受保护成员。例如,我可以这样做。

class Base
{
protected:
    int i;
}

class Derived : class Base
{
    void process()
    {
        i = 5;
    }
}

我的问题是,从派生类访问基类成员时是否可以强制使用范围解析运算符?原因是我想在代码中明确哪些变量来自基类。执行是这样的,我不会不小心跳过范围解析操作员(我不小心)。我不喜欢使用访问器,因为Derived类中需要基类中的许多成员,因此编写代码很繁琐。我顺便使用MSVC 2010。

class Base
{
protected:
    int i;
}

class Derived : class Base
{
    void process()
    {
        Base::i = 5;   //enforce so that i=5 won't compile
    }
}

2 个答案:

答案 0 :(得分:2)

您可以通过引入另一个范围来模拟它:

class Base {
protected:
    struct Data {int i;};
    Data d_Base;
};

class Derived : class Base {
    void process() {
        d_Base.i = 5;
    }
};

答案 1 :(得分:1)

您无法在基类本身中执行此操作,不,您无法执行此操作。但是,我正在考虑一个技巧,您可以在派生类中执行以强制执行您想要的操作,也就是说,如果您在派生类中声明一个具有相同名称的变量i作为成员,但是类型,例如,MyBadType ,这只是一个空类型,然后我在派生中将引用它,并且用户实际上没有任何东西可以用它。所以他必须有资格获得基础i。但这自然是个笑话,我的意思是,你不想为了强制限定名称而增加派生类的大小。你的目标本身有点可疑。

HTH, 阿尔钦