#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-挂载命令

    1.查询与自动挂载 mount:查询系统中已挂载的设备 mount -a :依据配置文件.etc/fsatb的内容,自动挂载 2.挂在命令格式 mount [-t 文件系统] [-o 特殊选项] 设备 ...

  2. vector的内存分配机制分析

    该程序初步演示了我对vector在分配内存的时候的理解.可能有误差,随着理解的改变,改代码可以被修改. /* 功能说明: vector的内存分配机制分析. 代码说明: vector所管理的内存地址是连 ...

  3. ZOJ2314 Reactor Cooling(有上下界的网络流)

    The terrorist group leaded by a well known international terrorist Ben Bladen is buliding a nuclear ...

  4. Two Cakes

    It's New Year's Eve soon, so Ivan decided it's high time he started setting the table. Ivan has boug ...

  5. RabbitMQ在windows环境下的安装

    最近一直想入手一台电脑,作为linux服务器,由于经济状况也没有入手,现在就先介绍windows环境下安装rabbitMQ. RabbitMQ是什么 ? RabbitMQ是一个在AMQP基础上完整的, ...

  6. oracle中merge的用法,以及各版本的区别 Create

    Merge是一个非常有用的功能,类似于Mysql里的insert into on duplicate key. Oracle在9i引入了merge命令,通过这个merge你能够在一个SQL语句中对一个 ...

  7. Azure VM从ASM迁移到ARM(一)

    Azure的IaaS有ASM和ARM两个版本,ARM的一些优点前面已经聊过很多了.ARM有更细的管理颗粒度,更多的功能等. 如果想从ASM迁移到ARM,目前有两类方法可以实现: 1. Azure平台支 ...

  8. QtCreator开启-O编译优化的方式

    首先,编译优化必须是在Release模式下进行,保证程序没有任何bug的条件下进行执行.编译优化能极大提升程序的运行效率,级别越高速度越快,但是对代码健壮性要求也越高! 选择编译release模式,在 ...

  9. Linux python安装

    Linux 安装 Python3.5   1. 准备 操作系统:Red Hat Enterprise Linux Server release 6.5 (Santiago) Python 安装包:Py ...

  10. 机器学习:PCA(降噪)

    一.噪音 噪音产生的因素:可能是测量仪器的误差.也可能是人为误差.或者测试方法有问题等: 降噪作用:方便数据的可视化,使用样本特征更清晰:便于算法操作数据: 具体操作:从 n 维降到 k 维,再讲降维 ...