派生类访问基类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的啊。
为什么这里可以编译通过啊,完全不解!
[解决办法]
类中可以对同类对象的成员访问,私有变量都可以。
[解决办法]
我觉得也许是这样子,既然规定子类的方法可以访问父类中的proteced成员(公有继承)。那么在函数里面应该是都可以访问的,无论以什么形式。像上例中把void bulk_item::memfcn(const bulk_item &d)
声明为void bulk_item::memfcn(const bulk_item *d)
然后用d->nprice的方式来访问,也是可以的。
如果不行的话,规定那不是自相矛盾了。我是这么理解的