C++中类成员访问权限的警醒
2011-03-23 15:26
295 查看
虽然用C++已经有上一段时间了,但是因为练习的不够多,导致自己在很多概念的理解上都有偏差。这样的例子今天又增加了一个,特此记录,警醒自己。
C++的类中的成员有三种不同的访问权限,控制外界对其成员的访问,分别是public、private、protected。
一般来说,位于private当中的成员外界无法访问,哪怕是继承自父类的子类,也不可能轻易地访问到父类的private成员。
但是今天注意到一个例外。那就是当本类的成员函数所接受的参数为同类对象时,该成员函数内部可以直接访问参数对象的私有成员。
比如说:
class A
{
private:
int a;
public:
void tt(A b);
};
void A::tt(A b)
{
b.a++;
}
上述代码的tt()函数是A的成员函数,a是A的私有成员,但传入给A的b对象的私有成员却是可以直接在tt函数当中使用的。如果参数是同类对象的引用、指针,情况也完全相同。这个可能为了方便类似拷贝构造函数而实现的一个小“缺口”。简而言之,类成员的权限是在类与类之间建立的关系,而不是对象与对象之间。
不过如果自己是一个子类,而父类作为参数传入的时候,父类的私有成员不能享受这样的偷渡待遇。
今天第一次真正注意到,警惕一下。
C++的类中的成员有三种不同的访问权限,控制外界对其成员的访问,分别是public、private、protected。
一般来说,位于private当中的成员外界无法访问,哪怕是继承自父类的子类,也不可能轻易地访问到父类的private成员。
但是今天注意到一个例外。那就是当本类的成员函数所接受的参数为同类对象时,该成员函数内部可以直接访问参数对象的私有成员。
比如说:
class A
{
private:
int a;
public:
void tt(A b);
};
void A::tt(A b)
{
b.a++;
}
上述代码的tt()函数是A的成员函数,a是A的私有成员,但传入给A的b对象的私有成员却是可以直接在tt函数当中使用的。如果参数是同类对象的引用、指针,情况也完全相同。这个可能为了方便类似拷贝构造函数而实现的一个小“缺口”。简而言之,类成员的权限是在类与类之间建立的关系,而不是对象与对象之间。
不过如果自己是一个子类,而父类作为参数传入的时候,父类的私有成员不能享受这样的偷渡待遇。
今天第一次真正注意到,警惕一下。
相关文章推荐
- c++与Java中继承关系对成员访问权限的影响之比较
- C++ 子类能不能改变父类中成员的访问权限?
- C++中指向子类的父类指针访问父、子类成员时的权限和函数隐藏规则
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++ protected成员访问权限
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++子父类成员之间相互访问的权限分析
- 【C++】:C++中的类成员访问权限
- C++成员变量、函数修饰符与访问权限
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++ 类成员的访问权限
- C++ protected成员访问权限
- C++ public protected private成员访问权限解读
- C++ 类的继承,子类以及之类的对象 对父类成员函数的访问权限
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++ 中基类及派生类中继承成员访问权限
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- C++成员变量、函数修饰符与访问权限
- C++成员访问权限
- c++ 类成员的访问权限priavte, protected, public