对private protected public的详解:
#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的详解:的更多相关文章
- private,protected,public和default的区别
private,protected,public和default的区别 除了default以外,其他都是Java语言的关键字.default代表的是对类成员没有进行修饰的情况.它本身也代表了一种访问控 ...
- @private@protected@public@package
@private@protected@public@package 为了强制一个对象隐藏其数据,编译器限制实例变量范围以限制其在程序中的可见性 但是为了提供灵活性,苹果也让开发者显式设置范围(四选一) ...
- oc 中四种实例变量的范围类型@private@protected@public@package
To enforce the ability of an object to hide its data, the compiler limits the scope of instance vari ...
- iOS中四种实例变量的范围类型@private@protected@public@package
文档上记录是这样的 The Scope of Instance Variables Toenforce the ability of an object to hide its data, the c ...
- PHP中private、public、protected的区别详解
先简单粗俗的描述下:public 表示全局,类内部外部子类都可以访问:private表示私有的,只有本类内部可以使用:protected表示受保护的,只有本类或子类或父类中可以访问: 再啰嗦的解释下: ...
- Java中的private protected public和default的区别
转至:http://blog.sina.com.cn/s/blog_74c571240101jaf5.html 类内部 本包 子类 外部包 public √ √ √ √ pro ...
- @private @protected @public
@private 作用范围仅仅在自身类 @protected 作用范围在自身类及继承自己的子类(默认属性) @public 在系统中的不论什么地方都能够使用
- 【Java】abstract,final,static,private,protected,public的区别
[abstract]抽象的 1. abstract可以修饰类和成员方法,被abstract修饰的类称为抽象类,被abstract修饰成员方法叫抽象方法.抽象类不一定有抽象方法,但拥有抽象方法的类一定是 ...
- java: private, protected, public
这三个 「可访问修饰符」,是一个老生常谈的话题了.在 C++ 中也有类似的概念. 按其修饰对象的不同,分为几种用法小记一下: 用于类 只有 public 可以修饰类:private 和 protect ...
随机推荐
- Mac 系统安装redis服务
1.首先去http://www.redis.io/下载最新的redis文件,现在最新的是redis-2.8.19 2.进行解压缩 tar -zxvf redis-2.8.19.tar.gz 3.移动重 ...
- UVA - 10934 Dropping water balloons (dp,逆向思维)
题目链接 题目大意:给你n个规格一样的气球和一栋大楼的高度,求最少试验几次能测出气球最高在哪一层掉下来不破. 如果这道题想用(dp[i][j]=用i个气球测出j高度的楼需要几次)来作为状态的话,那你就 ...
- Weblogic-unable to get file lock, will retry …问题解决
weblogic部署应用出现如下报错: <2017-8-15 下午05时08分44秒 CST> <Info> <Management> <BEA-141281 ...
- Java基础--虚拟机JVM
JVM内存结构 Heap Space: 堆内存(Heap Space)是由Young Generation和Old Generation组成,而Young Generation又被分成三部分,Eden ...
- linux configure使用方法
'configure'脚本有大量的命令行选项.对不同的软件包来说,这些选项可能会有变化,但是许多基本的选项是 不会改变的.带上'--help'选项执行'configure'脚本可以看到可用的所有选项. ...
- MySQL导入MongoDB
一.MongoDB的导入导出 mongoDB的导入导出,分为mongoDB官方提供的工具类,和第三方的工具类.下面依次介绍下: 1.1.mongoDB提供的工具 1.1.1.mongoimport工具 ...
- Java-API:java.util.list
ylbtech-Java-API:java.util.list 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 1. https://docs.oracle.co ...
- mybatis学习7 实战项目
自己写一个实战项目,最好和hibernate做对比.
- Rails的静态资源管理(四)—— 生产环境的 Asset Pipeline
官方文档:http://guides.ruby-china.org/asset_pipeline.html http://guides.rubyonrails.org/asset_pipeline.h ...
- Monitoring tools that everyone's currently using
Although a lot of new tools have arrived since 2011, it's clear that older open source tools like Na ...