对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 ...
随机推荐
- hive_学习_00_资源帖
一.官方资料 二.参考资料
- MySQL学习之一数据库简介
1.什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,长期储存在计算机内.有组织的.可共享的数据集合. 数据库中的数据指的是以一定的数据模型组织.描述和储存在一起. ...
- 树莓派(Linux)与镜像源
树莓派学习笔记--修改树莓派软件源 1. linux 镜像源文件 >> vim /etc/apt/sources.list 可在树莓派官网 http://www.raspbian.org/ ...
- 【剑指offer】删除链表中重复的节点,C++实现(链表)
0.简介 本文是牛客网<剑指offer>笔记. 1.题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针.例如,链表1-> ...
- XML的语法
XML的语法 文档声明: 写法 <?xml version="1.0" ?> 文档声明必须出现在xml文件的第一行和第一列的位置 属性: version="1 ...
- 数据处理之pandas库
1. Series对象 由于series对象很简单,跟数组类似,但多了一些额外的功能,偷个懒,用思维导图表示 2. DaraFrame对象 DataFrame将Series的使用场景由一维扩展到多维, ...
- Tomcat的安装与环境配置
首先,下载地址为:http://tomcat.apache.org/,在左侧的列表中找到Download,找到自己要下载的Tomcat的版本.我下载的是Tomcat 7. 进入后出现如上右图界面.我选 ...
- 使用Jsonp实现跨域请求
来自百度百科的一段话: JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题.由于同源策略,一般来说位于 server1.exampl ...
- Python 修改ha配置文件
任务要求: 1.用户输入字符串 {"backend": "test.oldboy.org","record":{"server&q ...
- Activiti:MalformedByteSequenceException: 3 字节的 UTF-8 序列的字节 3 无效。
在win下开发,有时编译或运行项目会报3字节的UTF-8序列的字节3无效. 解决该问题的办法 1.将xml头文件改为GBK编码方式 ,我这里不OK <?xml version="1.0 ...