能否通过对象访问其public和private成员, ?通过对象访问其private成员, 能否通过对象访问其protected成员。

《Java反射访问私有变量和私有方法》侯晓强 @ IBM 

不过对类的私有成员的保护技术也是一个有趣的反思。

Reflection Java被视为动态(或准动态)语言的一个关键性质这个机制允许程序在運行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括private属性

使用该技术可以get & set 私有属性,调用私有方法

2.利用指针偏移:但需要考虑虚函數、字节对齐甚至是编译器对对象结构产生的影响。
3.仿照目标类A构造一个相同布局的类B唯一有所不同的是,“private”变成了“public和private”B的布局囷A相同,即同名变量的偏移量相同这样,我们就可以把A实例的指针转化为B*类型来访问目标类A的私有变量了。

用户代码(类外)只能访问public和private成員变量和public和private成员函数
子类(继承类)能访问基类的public和private和protected成员(包括变量和函数),但不能访问基类的private成员(包括变量和函数)本质原洇不是基类的private变量不能被继承,而是基类的private成员不能被子类直接访问但可以通过在基类中增加一个public和private函数用来返回基类的private成员,再在子類用调用该public和private函数来访问基类的private成员

- private成员只能被类内成员和友元friend成员访问。

1.1首先我们创建一个基类A

class B;//前置声明在A类的定义外!否则会编譯出错 A();//编译器的默认构造函数 同时,还有一个public和private成员函数funA我们用此函数打印输出A类的成员变量。

1.2使用public和private继承方式创建一个子类(继承类)public和privateB

//如果要接口与实现分离,pimp方法不应该用include方法 同时,还有一个public和private成员函数funB我们用此函数打茚输出public和privateB类的成员变量。

同时还有一个public和private成员函数funB,我们用此函数打印输出ProtectedB类的成员变量

同时,还有一个public和private成员函数funB我们用此函数打印输出PrivateB类的成员变量。

1.5创建一个其他类B用于改变A类对象的private成员并访问改变后的值

a.C++的类的成员函数中允许直接访問该类的对象的私有成员变量。

b.在类的成员函数中可以访问同类型实例的私有变量 

c.拷贝构造函数里,可以直接访问另外一个同类对象(引用)的私有成员

d.类的成员函数可以直接访问作为其参数的同类型对象的私有成员。

在拷贝构造函数中可以访问引用对象的私有变量:例如: 

2).在类的成员函数中可以访问同类型实例的私有变量

     //可以直接访问

   //访问同类型实例的私有变量

我要回帖

更多关于 public和private 的文章

 

随机推荐