我的编译器(VC ++ 6.0)存在一个小问题。在我看来,这样的代码应该导致错误;
class Base
{
private:
typedef int T;
};
class Derived : private Base // Here the Base class can be inherited publicly as well. It does not play any role
{
public:
T z;
};
int main()
{
Derived obj;
obj.z = 7;
return 0;
}
此代码段在VC ++ 6.0下编译和运行,没有任何问题。
关于SW-Design,这段代码并不完美。不应将任何类成员声明为公共成员。但我对这方面不感兴趣。
我的问题是typedef。 typedef在Base类中声明为private。从我对C ++的理解来看,这个typedef对Derived类或main()函数都不可见。但两人都完美地看待它们。
有人对此现象有解释吗?
提前致谢
Necip
答案 0 :(得分:7)
这种行为在VC ++ 6.0中是不一致的,在定义Derived :: z时应该会出错。 (如果您有商业理由使用它,除了VC ++ 6.0之外还有其他选择 old )。