理解类级别的访问控制权限——类的成员函数可以访问该类所有对象的私有成员
2014-02-26 14:27
543 查看
无论是java还是c++都提供了三种访问控制权限:
public、private、protected
它们提供类级别的访问控制,但是类的成员函数可以访问同一类的所有对象的所有私有成员,例如下面的C++示例:
#include "stdafx.h"
#include <stdlib.h>
class test
{
protected:
private:
int ivalue;
int _get_and_add()
{
return (ivalue + 10);
}
public:
test()
{
ivalue = 0;
}
void setValue(int _ivalue)
{
ivalue = _ivalue;
}
void setValue(test t)
{
ivalue = t.ivalue;
}
void add(test t)
{
ivalue += t._get_and_add();
}
int getValue()
{
return ivalue;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
test t1,t2;
printf("1. value:\n");
printf(" t1: %d \n",t1.getValue());
printf(" t2: %d \n",t2.getValue());
t2.setValue(100);
t1.setValue(t2);
printf("2.after setValue:\n");
printf(" t1: %d \n",t1.getValue());
printf(" t2: %d \n",t2.getValue());
t1.add(t2);
printf("3.after add_other:\n");
printf(" t1: %d \n",t1.getValue());
printf(" t2: %d \n",t2.getValue());
system("pause");
return 0;
}
其中类test的成员函数:
void add(test t)
{
ivalue += t._get_and_add();
}
分别访问了同类的其他对象(由参数传递过来)t
的私有数据成员 ivalue以及私有函数,上述程序的输出结果为:
public、private、protected
它们提供类级别的访问控制,但是类的成员函数可以访问同一类的所有对象的所有私有成员,例如下面的C++示例:
#include "stdafx.h"
#include <stdlib.h>
class test
{
protected:
private:
int ivalue;
int _get_and_add()
{
return (ivalue + 10);
}
public:
test()
{
ivalue = 0;
}
void setValue(int _ivalue)
{
ivalue = _ivalue;
}
void setValue(test t)
{
ivalue = t.ivalue;
}
void add(test t)
{
ivalue += t._get_and_add();
}
int getValue()
{
return ivalue;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
test t1,t2;
printf("1. value:\n");
printf(" t1: %d \n",t1.getValue());
printf(" t2: %d \n",t2.getValue());
t2.setValue(100);
t1.setValue(t2);
printf("2.after setValue:\n");
printf(" t1: %d \n",t1.getValue());
printf(" t2: %d \n",t2.getValue());
t1.add(t2);
printf("3.after add_other:\n");
printf(" t1: %d \n",t1.getValue());
printf(" t2: %d \n",t2.getValue());
system("pause");
return 0;
}
其中类test的成员函数:
void setValue(test t) { ivalue = t.ivalue; }
void add(test t)
{
ivalue += t._get_and_add();
}
分别访问了同类的其他对象(由参数传递过来)t
的私有数据成员 ivalue以及私有函数,上述程序的输出结果为:
相关文章推荐
- 因为成员函数属于同一个类的所有对象,所以在成员函数内可以访问同类其他对象的私有成员是合理的
- C++中类的访问权限针对的是类而不是对象!(为什么类中的函数可以访问对象的私有成员?)
- 为什么一个对象调用的类方法可以访问该类其他对象的私有成员
- Scala中包、类、对象、成员访问权限理解
- 类成员函数可以访问相同类对象的私有对象
- C++本类可以访问本身类的私有成员(即拷贝构造函数可以访问本身对象的私有成员)
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++为什么类的成员函数中(复制构造函数,赋值操作符等)可以有貌似类的对象访问类的私有成员的用法?
- C++对象中的私有成员变量可以被访问
- 学习笔记-----关于C++中类的成员函数可以访问私有成员的问题
- C++在类的成员函数中,允许直接访问该类的成员对象的私有成员变量
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- KVC 键值编码 权限非常强大,可以访问对象属性,包括私有
- 《java编程思想》之控制对成员的访问权限的原因、final、继承和组合、私有方法的“覆盖”
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- 《java编程思想》之控制对成员的访问权限的原因、final、继承和组合、私有方法的“覆盖”
- 应用程序中的所有线程都可以访问方法中的公用字段。要同步对公用字段的访问,您可以使用属性替代字段,并使用 ReaderWriterLock 对象控制访问。为此,请按照下列步骤操作:
- 在重载运算符时,类的对象可以直接访问私有成员解惑
- 《java编程思想》之控制对成员的访问权限的原因、final、继承和组合、私有方法的“覆盖”