protected访问标号的一个生僻
《c++ primer》15.2.2节中有这样一段话:
派生类只能通过派生类对象访问其基类的protected成员,派生类对其基类类型对象的protected成员没有特殊权限。
例子:Item_base是Bulk_item的基类,Bulk_item定义了一个成员方法,接受一个Bulk_item对象的引用,和一个Item_base类型对象的引用,该函数可以访问自己对象的protected成员和Bulk_item形参的protected成员,但是,它没有Item_base类型形参的protected成员的访问权限。
代码验证:
Item_base.h:
#include "Bulk_item.h"#include <iostream>using namespace std;Bulk_item::Bulk_item(const string& sIsbn, double price) :Item_base(sIsbn, price){}void Bulk_item::memfcn(const Bulk_item & d, const Item_base & b){ cout << "Bulk_item m_dPrice" << d.m_dPrice << endl; cout << "Item_base m_dPrice" << b.m_dPrice << endl; //这行导致编译失败,没有访问权限 cout << "m_dPrice" << m_dPrice << endl;}