#include <iostream>
#include <stack>
#include <queue>
#include <exception>
#include <sstream>
#include <string>
#include <vector>
#include<list>
#include<cassert>
#include<cstdlib>
using namespace std; class A{
private:
int AprivateVar;
void Apirvate()
{
cout<<"A:Aprivate()"<<endl;
}
protected:
int AprotectedVar;
void Aprotected()
{
cout<<"A:Aprotected()"<<endl;
}
public:
int ApublicVar;
void Apublic()
{
cout<<"A:Apublic()"<<endl;
} void Test()
{
AprivateVar=;
Apirvate();
AprotectedVar=;
Aprotected();
ApublicVar=;
Apublic();
}
}; class Bprivate:private A
{
public:
void test()
{
//访问基类private成员
// AprivateVar=1;//这里因为子类声明的是private故不可访问
// Apirvate();//这里因为子类声明的是private故不可访问 AprotectedVar=;
Aprotected(); ApublicVar=;
Apublic();
}
}; class Cprivate:public Bprivate
{
public:
void test()
{
//此处全都不能访问
//在子类中:基类的public成员和protected成员是可见的.基类的public成员和protected成员都变成子类的private成员,并且不能这个子类的派生类所访问.
/*AprivateVar=1;/
Apirvate();/ AprotectedVar=1;
Aprotected(); ApublicVar=1;
Apublic();*/
}
}; class Bprotected:protected A
{
public:
void test()
{
//访问基类private成员
//AprivateVar=1;//这里因为子类声明的是private故不可访问
//Apirvate();//这里因为子类声明的是private故不可访问 AprotectedVar=;
Aprotected(); ApublicVar=;
Apublic();
}
}; class Bpublic:public A
{
public:
void test()
{
//AprivateVar=1;//子类不能访问基类中的private成员
//Apirvate();//子类不能访问基类中的private成员 AprotectedVar=;//子类可以访问基类中的protected成员
Aprotected();//子类可以访问基类中的protected成员 ApublicVar=;//子类可以访问基类中的public成员
Apublic();//子类可以访问基类中的public成员
}
}; int main(int argc,char* argv[])
{
A testA;
// testA.Apirvate();//实例的私有方法不能访问
// testA.Aprotected();//实例的受保护方法不能访问
testA.Apublic(); Bprivate testB;
//testB.Apirvate();//实例的私有方法不能访问
// testB.Aprotected();//实例的受保护方法不能访问
//testB.Apublic();//因为是private继承的.所以.实例对象不能访问私有方法 Bprotected testB2;
//testB2.Apirvate();//实例的私有方法不能访问
//testB2.Aprotected();//实例的受保护方法不能访问
//testB2.Apublic();//实例的受保护方法不能访问 Bpublic testB3;
//testB3.Apirvate();//子类的实例对象.只能访问基类的public成员.
//testB3.Aprotected();//子类的实例对象.只能访问基类的public成员.
testB3.Apublic();//子类的实例对象.只能访问基类的public成员.
return ;
} /*
总结一下:
基类的实例对象,在这里和普通类是一样的,只能访问类的public成员方法和public成员变量;也就是public成员可见,protected和private是不可见的;
1.Public继承:基类的public成员和protected成员对子类是可见的.继承以后public和protected都保持原有的状态.private是不可见的.也就是说子类
中不能访问基类中的private成员,
子类的实例对象.只能访问基类的public成员.以及自身的public成员.
所以:在public继承时,子类的实例对象可以访问基类中的public成员.而子类中的成员方法可以访问基类中的public和protected成员.
2.Private继承:基类的实例对象,可以访问基类的public成员(和普通类一样).
在子类中:基类的public成员和protected成员是可见的.基类的public成员和protected成员都变成子类的private成员,这些public和protected成员不能被这个子类的派生类所访问.
基类的私有成员是不可见的,也就是说子类不能访问基类中的私有成员.
子类的实例对象,不能访问基类的所有成员.私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承.
3.protected继承:子类中可以访问基类的public成员和protected成员,基类的public和protected成员都变成protected成员,并且不能被这个派生类的子类所访问,基类的私有成员
是不可见的,派生类不能访问基类中的私有成员.在protected继承时,基类的成员也只能由直接派生类访问,不能在往下继承. */

对private protected public的详解:的更多相关文章

  1. private,protected,public和default的区别

    private,protected,public和default的区别 除了default以外,其他都是Java语言的关键字.default代表的是对类成员没有进行修饰的情况.它本身也代表了一种访问控 ...

  2. @private@protected@public@package

    @private@protected@public@package 为了强制一个对象隐藏其数据,编译器限制实例变量范围以限制其在程序中的可见性 但是为了提供灵活性,苹果也让开发者显式设置范围(四选一) ...

  3. oc 中四种实例变量的范围类型@private@protected@public@package

    To enforce the ability of an object to hide its data, the compiler limits the scope of instance vari ...

  4. iOS中四种实例变量的范围类型@private@protected@public@package

    文档上记录是这样的 The Scope of Instance Variables Toenforce the ability of an object to hide its data, the c ...

  5. PHP中private、public、protected的区别详解

    先简单粗俗的描述下:public 表示全局,类内部外部子类都可以访问:private表示私有的,只有本类内部可以使用:protected表示受保护的,只有本类或子类或父类中可以访问: 再啰嗦的解释下: ...

  6. Java中的private protected public和default的区别

    转至:http://blog.sina.com.cn/s/blog_74c571240101jaf5.html    类内部  本包  子类 外部包  public    √  √  √  √ pro ...

  7. @private @protected @public

    @private  作用范围仅仅在自身类 @protected 作用范围在自身类及继承自己的子类(默认属性) @public 在系统中的不论什么地方都能够使用

  8. 【Java】abstract,final,static,private,protected,public的区别

    [abstract]抽象的 1. abstract可以修饰类和成员方法,被abstract修饰的类称为抽象类,被abstract修饰成员方法叫抽象方法.抽象类不一定有抽象方法,但拥有抽象方法的类一定是 ...

  9. java: private, protected, public

    这三个 「可访问修饰符」,是一个老生常谈的话题了.在 C++ 中也有类似的概念. 按其修饰对象的不同,分为几种用法小记一下: 用于类 只有 public 可以修饰类:private 和 protect ...

随机推荐

  1. (转)关于Linux核心转储文件 core dump

    所谓核心转储文件是内含进程终止时内存映像的一个文件.产生条件:特定的信号会引发进程创建一个核心转储文件并终止运行. 包括哪些特定信号,请参见http://man7.org/linux/man-page ...

  2. skynet coroutine 运行笔记

    阅读云大的博客以及网上关于 skynet 的文章,总是会谈服务与消息.不怎么看得懂代码,光读这些文字真的很空洞,不明白说啥.网络的力量是伟大的,相信总能找到一些解决自己疑惑的文章.然后找到了这篇讲解 ...

  3. ThinkPHP中的find和select的区别

    ThinkPHP作为PHP中应用广泛又好用的框架,能比较快速的开发MVC架构的管理系统,获得了大量的应用.但是在ThinkPHP中select()和find()方法有什么区别呢? 事实上find()返 ...

  4. Django之用户认证系统分析

    Django自带一个用户认证系统,这个系统处理用户账户.组.权限和基于cookie的会话,下面将通过分析django源码的方式仔对该系统进行详细分析 1. 用户模型 在django.contrib.a ...

  5. 快速构建一个 Springboot

    快速构建一个 Springboot 官网:http://projects.spring.io/spring-boot/ Spring Boot可以轻松创建可以“运行”的独立的,生产级的基于Spring ...

  6. Django ImageField 上传图片并保存到数据库

    转自:http://logic0.blog.163.com/blog/static/188928146201371235435974/ Form代码: class ImageUploadForm(fo ...

  7. 排列(加了点小set就过了,哈哈哈)

    Ray又对数字的列产生了兴趣: 现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数. 输入描述: 1 2 3 4 1 1 2 3 0 1 2 3 0 0 0 0输出 ...

  8. AngularJs出现错误Error: [ng:areq]

    1.没有对应的控制器 2.有控制器但是路径没有配对

  9. Directx 9 VS2015环境搭建

    安装好Directx9 sdk和vs2015后 打开vs,新建项目 --> c++项目  -->win32控制台应用程序-->空项目 创建项目后,右键项目属性, 包含目录 D:\Pr ...

  10. Makefile中的路径

    使用 $(shell pwd) 可以在Makefile中指定为当前Makefile所在目录的路径