gpt4 book ai didi

c++ - 类引用授予对私有(private)成员的访问权限

转载 作者:行者123 更新时间:2023-11-28 07:52:01 27 4
gpt4 key购买 nike

我正在编写一个用于轻松“打开”模式的类,然后我有点困惑。在重载的 operator= 上从另一个类复制,访问私有(private) T 成员 m_Mode 被授予,为什么会这样?是 sandard,还是编译器错误?

template<class T>
class CFixedMode
{
private:
T m_Mode;
public:
CFixedMode()
{
m_Mode = static_cast<T>(0);
}
~CFixedMode(){}
void SetMode( T mode );
void SetNotMode( T mode );
BOOL IsMode( T mode );
CFixedMode<T>& operator=( const CFixedMode< T >& rFixedMode );
};

template<class T>void CFixedMode<T>::SetMode( T mode )
{
m_Mode |= mode;
}
template<class T>void CFixedMode<T>::SetNotMode( T mode )
{
m_Mode &= (~mode);
}
template<class T>BOOL CFixedMode<T>::IsMode( T mode )
{
return ( ( m_Mode & mode ) == mode ) ? TRUE : FALSE;
}
template<class T>CFixedMode<T>& CFixedMode<T>::operator =( const CFixedMode<T>& rFixedMode )
{
if( typeid( m_Mode ) == typeid( rFixedMode.m_Mode ) )
m_Mode = rFixedMode.m_Mode;
return *this;
}

int _tmain(int argc, _TCHAR* argv[])
{
CFixedMode<DWORD> Mode;
DWORD rMode = 0x00000010;
Mode.SetMode( rMode );

CFixedMode<DWORD> Mode2;
Mode2 = Mode;
if( Mode2.IsMode( 0x00000010 ) )
{
//cout << Mode2.m_Mode; //c2248
cout << "True" << endl;
}

typeid(Mode).before(typeid(CFixedMode<DWORD>));

return 0;
}

最佳答案

Private 意味着它对 是私有(private)的,而不是对类的实例 私有(private)的。 private 用于隐藏实现细节,因此同类型的对象可以访问其他对象的私有(private)成员是有道理的。那些其他对象具有相同的实现,因此没有必要隐藏细节。

顺便说一下,您的 operator= 应该检查 self 赋值。 (或者,正如 Chris 指出的那样,您可以使用 copy-and-swap 习惯用法。)而且,您不需要使用 typeid 检查类型。

关于c++ - 类引用授予对私有(private)成员的访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13578552/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com