可以使用类Private数据成员?
一个List类的其中一个成员函数,其中
data和ptrNext都是private的,
这里申明了一个新的List对象,为什么该对象可以直接访问类的私有数据成员呢?
因为newPtr对象并不是当前对象啊。
void List::insert(int i)
{
List *newPtr = new List;
assert(newPtr!=0);
newPtr->data = i;
newPtr->ptrNext = 0; // 最后一个元素
}
问题点数:5、回复次数:10Top
1 楼RookieStar(Yukon)回复于 2004-08-04 17:58:55 得分 0
是否私有是对类来讲的,不是对对象而言的,前者范畴广,所以产生了你所谓的疑问。Top
2 楼pwtitle(doodoo)回复于 2004-08-06 11:37:52 得分 0
没明白!!!!!Top
3 楼geochway(geochway)回复于 2004-08-06 13:28:45 得分 2
RookieStar说得有点道理,不过问题似乎并不是那么简单.
我看了BCB中有关private的描述,我感觉应该这样理解:
类的私有成员只有该类的成员函数或友元函数才能存取,
类的成员函数同时也是类的友元函数,因此它可以在该类的
对象之外存取对象内的私有成员.
而protected成员只有继承的类能够存取,但继承的类和
基类概念上并不是同一个类,因此继承的类虽然可以存取基
类的protected成员,但仅限于自身.
class base
{ private:
int Priv;
protected:
int Prot;
public:
int GetPri(base &B){ return B.Priv; } //可以
};
class CBase : public base
{ public:
int GetPrivate(base &B){ return B.Priv; } //错误
int GetProt1(base &B){ return B.Prot; } //错误
int GetProt2(){ return Prot; } //可以
int GetPriv(){ return Priv; } //错误
};
Top
4 楼pwtitle(doodoo)回复于 2004-08-06 13:38:33 得分 0
类的成员函数同时也是类的友元函数,因此它可以在该类的
对象之外存取对象内的私有成员.
这里我的List *newPtr = new List;
完全是一个新的对象啊。和当前对象并不是同一对象。
也就是或在Class A内的成员函数中申明A对象B,B如何能访问到A的私有成员呢?
照这样的理解下面岂不也是正确的?
void List::insert(int i)
{
MyClass *obj = new MyClass;
obj->data = i; //data为类的私有数据成员
}
Top
5 楼universe01(未知软体)回复于 2004-08-06 14:55:55 得分 0
因为
在void List::insert(int i)
里面吧!Top
6 楼bailingke(大钊)回复于 2004-08-06 16:35:49 得分 0
A\B对象都有自己的data和ptrNext成员变量
所以newPtr->data = i;
newPtr->ptrNext = 0;
是不违反语法的。
希望我已经解释清楚了。Top
7 楼shenyiwen(沈亦文)回复于 2004-08-06 16:50:31 得分 2
"这里我的List *newPtr = new List;
完全是一个新的对象啊。和当前对象并不是同一对象。"
前面已经说了,访问权限是基于类的,不是基于对象的.
尽管对象是新建的,但类还是List.相同类可以互相访问私有成员.Top
8 楼qhgary(Gary)回复于 2004-08-06 16:59:23 得分 1
私有是相对于不同类之间的实例来说的(子类也属于不同类)
就是说同一个类的不同对象之间不存在私有的问题Top
9 楼toxyboy(不专业,我就顶,绝不误导别人!!)回复于 2004-08-06 17:52:04 得分 0
MarkTop
10 楼bravebarbarian(野蛮人)回复于 2004-08-06 18:04:19 得分 0
你拿个指针,就没有你访问不了的东西。
算偏移再强制转换。Top




