protected成员
可以认为protected访问标号是private 和public 的混合:
1.像private成员一样,protected成员不能被类的用户访问.
2.像public成员一样,protected成员可被该类的派生类访问.
 
此外,protected还有另一个重要性质:
派生类只能通过派生类对象访问其基类的protected成员,派生类对其基类类型对象的protected成员没有特殊访问权限.
少量的理解:
 
#include "stdafx.h"
#include<iostream>
using namespace std;
 
class Ctest
{
public:
Ctest(int a=1,int b=2,int c=3):pub(a),pro(b),pri(c){}
int pub;
void retprotected()
{cout<<pro<<endl;}
protected:
int pro;
void prof(){cout<<"CtestProtected fun"<<endl;}
private:
int pri;
};
 
class TDer: public Ctest
{
public:
TDer(int a=1,int b =2,int c =3,int d =4):Ctest(a,b,c),Tpri(d)
{
//cout<<pri<<endl;//派生类不能访问积累的private对象
prof();//派生类可以访问基类的protected
}
 
void retprotected2()
{
//cout<<pri<<endl;//此处不能用,因为不能访问基类的private
cout<<pro<<endl;//派生类可以访问基类的protected
cout<<Tpri<<endl;//访问自身的private
}
private:
int Tpri;
};
 
int _tmain(int argc, _TCHAR* argv[])
{
 
TDer Ttest(11,22,33,44);
//cout<<Ttest.pro<<endl;//这里是不可以访问的.和private成员一样,protected成员不能被类的用户访问
return 0;
}
 
 
公用、私有和受保护的集成
每个类控制它所定义的成员的访问。派生类可以进一步限制但不能放松对所继承的成员的访问。
 
无论派生列表中是什么访问标号,所有继承Base的类对Base中的成员具有相同的访问。派生访问标号将控制派生类的用户对从Base继承而来的成员的访问.
class Base
{
public:
void basemem();
protected:
int i;
};
 
struct Public_derived:public Base
{
int use_base(){return i;}//这里.可以访问基类的protected
};
 
struct Private_derived:private Base{
    int use_base(){return i;}//同样,这样也可以访问i
};
 
如下:
Base b;
public_derived d1;
Private_derived d2;
b.basemen();//可以
d1.basemem();//可以
d2.basemem();//这是错误的,因为Private_derived是私有继承.导致的事Private_derived中的成员private化了

了解protected 以及公用、私有和受保护的继承的更多相关文章

  1. typescript 公共,私有与受保护的修饰符

    public理解 当你在程序中没有指明修饰符时,默认为public,也就是在类内类外都可以访问,我们以下面的例子来解释. class Person{ name:string sex:string ag ...

  2. PHP受保护的类和私有类什么区别

    受保护的继承后可以访问,私有的只能在该类中访问,不会被继承访问class Man{ protected $name='lee';//受保护 private $age=123;//私有 function ...

  3. 受保护的封装 protected

    补充内容:封装 私有化封装 private受保护的封装 protected公共的封装 public 注意:python目前不支持设定受保护的成员,但是开发者由约定的使用方式 受保护的封装:在成员名称前 ...

  4. Python - 面向对象(三)公共变量,受保护变量,私有变量

    前言 在Python的类里面,所有属性和方法默认都是公共的:但Python也可以设置受保护.私有类型的变量or方法 受保护类型的变量.方法 一般称为:protected变量 #!/usr/bin/en ...

  5. 【转载】如何破解受保护的excel密码

    [工具] 1.电脑一台(安装有Microsoft Excel) 2.受保护excel一个 [步骤] 1.首先,打开受保护的Excel表格,按"ALT"+"F11" ...

  6. System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

    系统debug时出现错误,System.AccessViolationException: 尝试读取或写入受保护的内存.这通常指示其他内存已损坏. Attempted to read or write ...

  7. ruby中的私有方法和保护方法

    ruby中的私有方法是指方法只能被隐含调用,不能被显示调用.而当没有显示接收者的时候,会把self当成接收者.因此,只能在自身中调用私有方法,这也是私有方法的调用规则. ruby的私有方法机制目的是: ...

  8. 编写高质量代码改善C#程序的157个建议——建议49:在Dispose模式中应提取一个受保护的虚方法

    建议49:在Dispose模式中应提取一个受保护的虚方法 在标准的Dispose模式中,真正的IDisposable接口的Dispose方法并没有做实际的清理工作,它其实是调用了下面的这个带bool参 ...

  9. asp.net报错“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”的解决办法

    来源:http://ajxfxb.blog.163.com/blog/static/56675086201411634336878/ 作者是:没完没了的工作 asp.net报错“尝试读取或写入受保护的 ...

随机推荐

  1. Devexpress Spreadsheet 中文教程

    http://blog.csdn.net/hotmee/article/details/50554381

  2. 九度OJ 1019:简单计算器 (基础题、DP)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6725 解决:2454 题目描述:     读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. 输入:     ...

  3. cmake是什么

    1 cmake是什么 cmake是一个管理软件build过程的工具.它并不会直接build处软件可执行文件本身,而是build出可以build出软件本身的全部工程文件,比如makefiles.xcod ...

  4. vscode设置默认shell 快速到行

    vscode设置默认shell - CSDN博客 https://blog.csdn.net/butterfly5211314/article/details/78944805 在文件 -> 首 ...

  5. kafka source type

    https://flume.apache.org/FlumeUserGuide.html # example.conf: A single-node Flume configuration # Nam ...

  6. 流畅的python学习笔记:第十三章:重载运算符__add__,__iadd__,__radd__,__mul__,__rmul__,__neg__,__eq__,__invert__,__pos__

    在前面第十章以及第一章的时候介绍了Vector对象的运算符重载.第十三章专门介绍运算符重载.这里我们看几个之前没讲过的运算符__neg__,__pos__,__invert__ class Vecto ...

  7. django mysql setting 设置

    django mysql setting  django mysql 设置 DATABASES = {    'default': {        'ENGINE': 'django.db.back ...

  8. Java for LeetCode 104 Maximum Depth of Binary Tree

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...

  9. 剑指Offer:二叉树打印成多行【23】

    剑指Offer:二叉树打印成多行[23] 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题目分析 Java题解 package tree; import java.uti ...

  10. 使用Spring AOP实现MySQL数据库读写分离案例分析

    一.前言 分布式环境下数据库的读写分离策略是解决数据库读写性能瓶颈的一个关键解决方案,更是最大限度了提高了应用中读取 (Read)数据的速度和并发量. 在进行数据库读写分离的时候,我们首先要进行数据库 ...