c++ 中同一个类的不同对象能互相访问对方的 protected 成员?解决思路

c++ 中同一个类的不同对象能互相访问对方的 protected 成员?
按道理来说应该是不允许才对,不过编译器(VC++ 6)竟然没有报错?
[code=c/c++]
void SHape::copy(const CBShape &sp)
{
    cons(sp.GetType(), sp.IsSelected(), sp.m_bound, sp.m_nhdls, sp.m_handles);
}
[/code]
成员变量 m_... 都是 protected 声明, 但是程序编译通过了, 奇怪

------解决方案--------------------
C/C++ code

class A{
protected:
    int mX;
    int mY;
};

class B: public A{
public:
    int GetAX(A *a);
};

int B::GetAX(A *a){
    B *b = static_cast<B *>(a);
    return b->mX;
}

------解决方案--------------------
探讨
SHape 有继承 CBShape
不过不管是否有继承, 应该都无法访问吧。。。
本身就是不同的对象,难道不同对象间不是只能通过 public 修饰共享数据?

------解决方案--------------------
[Quote=引用:]
引用:
C/C++ codeclassA{protected:intmX;intmY; 
};classB:publicA{public:intGetAX(A a); 
};intB::GetAX(A a){returna.mX; 

试了下,似乎是编不过,只有public才可以,请高手指点。 
 
[code=c/c++]
class SHape {
protected:
  int m_data;

public:
  void copy(const SHape &sp) {
  m_data = sp.m_data;
  }
};
[/code] 
但是这样就可以?
[/Quote]

即便是private也可以噢