读书人

派生类访问基类protected成员迷惑

发布时间: 2012-11-04 10:42:42 作者: rapoo

派生类访问基类protected成员疑惑
class Item_base
{
.....
protected:
double nprice;
};

基类Item_base有个protected 成员 nprice

class bulk_item : public Item_base
{
public:
void memfcn(const bulk_item &d);
};

派生类bulk_item有这么一个成员函数memfcn

void bulk_item::memfcn(const bulk_item &d)
{
double ret = nprice;
ret = d.nprice;
}

d是一个对象,此时nprice是d的protected成员。对象只能访问public的啊
为什么这里可以编译通过啊,完全不解!



[解决办法]
类中可以对同类对象的成员访问,私有变量都可以。


探讨

引用:
protected:可以被1.该类中的函数、2.子类的函数、以及3.其友元函数访问。但不能被该类的对象访问。


int main()
{
bulk_item item,a;
item.memfcn(a);
cout<<item.nprice;这样就不行
return 0;
}



一般说法是:
类的继承后方法属性变化。
private……

[解决办法]
我觉得也许是这样子,既然规定子类的方法可以访问父类中的proteced成员(公有继承)。那么在函数里面应该是都可以访问的,无论以什么形式。像上例中把void bulk_item::memfcn(const bulk_item &d)
声明为void bulk_item::memfcn(const bulk_item *d)
然后用d->nprice的方式来访问,也是可以的。

如果不行的话,规定那不是自相矛盾了。我是这么理解的

读书人网 >C++

热点推荐