c++派生理论问题

以下几句话正确吗?
<1>通过public方式产生的派生类可以直接访问基类公有成员和保护成员 但不能访问基类私有成员
<2>通过private方式产生的派生类不能访问任何基类的成员
<3>通过protected方式产生的派生类不能访问任何基类成员
我说的访问 是用派生类的对象去访问....并不是在派生类中的访问

(1)错:通过public方式产生的派生类可以直接访问基类公有成员和保护成员 但不能"直接"访问基类私有成员,我们可以通过基类的公有函数接口对基类的私有成员进行访问.

(2)错:通过private方式产生的派生类中,共有和保护成员以私有成员的身份出现,派生类的成员可以"直接"访问他们,但是在类外通过派生类无法直接访问他们.

(3)错:通过protected方式产生的派生类中基类的共有和保护成员以保护成员的身份存在在派生类中,而基类的私有成员不能"直接"访问.记得好像是在第一次保护继承中派生类可以直接访问基类的公有和保护成员,再进行保护继承的话,好像就不能直接访问基类的成员了.
我答得还凑活吧,给我来点分啊.谢谢
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-11
首先你要明白派生类的对象去访问只能访问 public:的东西,只有public的东西才是用对象去访问的。
class CXXXWnd : public CHSDrawlItemWnd
{

public:
CXXXWnd ();
virtual ~CXXXWnd ();
void DrawMidLine(CDC* );
CDrawItemWnd* GetInterface(DRAWITEMWND eType);
protected:
void SendMarkLineMoveMessage(int );
BOOL WhetherCover();
protected:
int m_iMarkLineXPos;
protected:
DECLARE_MESSAGE_MAP()
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
};
当用 CXXXWnd 生成一个对象 wnd时:
wnd.DrawMidLine();
wnd.GetInterface();
都是可以用的,
wnd.SendMarkLineMoveMessage(int );
和wnd.WhetherCover();
因为是protected:,他们只是供这个类使用,也许在DrawMidLine()或者GetInterface()用到了。
至于派生的类型CXXXWnd 是 public, protected,还是private CHSDrawlItemWnd
只会影响到你在设计CXXXWnd 时可以从CHSDrawlItemWnd直接拿过来的东西,我上面的例子是public,就是CHSDrawlItemWnd中除了声明为private 的东西CXXXWnd都有,并且在CHSDrawlItemWnd为protected的东西在CXXXWnd 里也为protected,public的也一样
而 class CXXXWnd : protected CHSDrawlItemWnd
就是说,在CHSDrawlItemWnd中为public的东西,现在在CXXXWnd 为protected ,不能再从对象中访问了。
class CXXXWnd : private CHSDrawlItemWnd同理就是把CHSDrawlItemWnd中的 public 和 protected的东西都变成CXXXWnd private 的东西了。如果从CXXXWnd 再派生一个类 CYYYWnd,那么CHSDrawlItemWnd对CYYYWnd来说都是private本回答被提问者采纳
第2个回答  2010-08-11
第(3)条不对,派生类可以访问基类protected方式下的成员。
相似回答