关于protected成员
来源:互联网 发布:万能的淘宝 编辑:程序博客网 时间:2024/05/16 09:05
protected是介于private和public之间的一种访问权限:
* 像private成员一样,protected成员不能被类的用户访问;
* 像public成员一样,protected成员可被该类的派生类访问。
* 派生类只能通过派生类对象访问其基类的protected成员,派生类对其基类类型对象的protected成员没有特殊的访问权限。
例如,假定Bulk_item定义了一个成员函数,接受一个Bulk_item对象的引用和一个Item_base对象的引用,该函数可以访问自己对象的protected成员以及Bulk_item形参的protected成员,但是,他不能访问Item_base形参的protected成员。
class Item_base{public: Item_base(const string &book="", double sales_price=0.0): isbn(book), price(sales_price){} string book() const { return isbn;} virtual double net_price(size_t n) const { return n*price; } virtual ~Item_base(){}private: string isbn;protected: double price; };class Bulk_item: public Item_base{public: double net_price(size_t) const; void memfcn(const Bulk_item &d, const Item_base &b);private: size_t min_qty; // minimum purchase for discount to apply double discount; // fractional discount to apply};void Bulk_item::memfcn(const Bulk_item &d, const Item_base &b){ // attempt to use protected member double ret = price; // ok: use this->price ret = d.price; // ok: use price from a Bulk_item ret = b.price; // error: no access to price from Item_base }d.price的使用正确,因为是通过Bulk_item 类型对象引用price,b.price的使用非法,因为对Item_base类型的对象没有特殊访问权限。
如果没有继承,类只有两种用户:类本身的成员和该类的用户。将类划分为private和public访问级别反映了用户种类的这一分隔:用户只能访问public接口,类成员和友元既可以访问public成员也可以访问private成员。有了继承,就有了类的第三种用户:从类派生定义新类的程序员。派生类的提供者通常(但并不总是)需要访问(一般为private的)基类实现,为了允许这种访问而仍然禁止对实现的一般访问,提供了附加的protected访问标号。类的protected部分仍然不能被一般程序访问,但可以被派生类访问。只有类本身和友元可以访问基类的private部分,派生类不能访问基类的private成员。
定义类充当基类时,将成员设计为public的标准并没有变:仍然是接口函数应该为public,而数据一般不应为public。被继承的类必须决定实现的哪些部分声明为protected,哪些部分声明为private。提供给派生类型的接口是protected成员和public成员的组合。
- 关于protected成员
- 关于protected成员
- 关于private成员、protected成员、public成员调用问题
- 关于protected
- protected成员访问规则
- C++ protected成员
- 关于public, private 和 protected继承中对基类成员的访问
- c++学习笔记--protected成员
- C++ protected成员访问权限
- C++ protected成员访问权限
- c++ protected成员及继承
- 基类的protected成员
- C++ protected成员访问权限
- protected 成员继承和使用
- 关于public,protected,private
- 关于protected access label
- 关于protected 的细节
- 关于public、protected、private
- 格雷码与二进制的转换
- 页面生成表格方式总结
- 重载QwtPlot类编译错误,需宏定义QWT_DLL才能使用QWT抛出类
- Python datetime
- SIP消息路由
- 关于protected成员
- Android RecyclerView多个Item布局的实现(可实现头部底部)
- sourceTree创建分支和合并代码
- qqlite 插件开发总结
- php环境设置(win7)
- NLTK-自然语言工具包
- Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法
- LeetCode:Maximal Rectangle
- 【leetcode】155. Min Stack【E】【98】