C++中关于保护成员的作用
(2011-10-03 20:57:41)
标签:
保护成员it |
分类: c/c 基础 |
C++中关于保护成员的作用
先看一个例子:
有一个类a,他有一个成员函数a_mem_fun(),类a包含了保护成员obj_b1,obj_b1是类b1的对象,b1是类b的子类,b_mem_fun()是b类的保护成员,请问如下操作可以吗:
答案:不能这么访问,保护成员相当于私有,类外不能访问。注意:保护成员的提出主要是为了解决在派生类中要频繁访问基类中的私有成员而提出的,因此,把基类中的那些在其派生类中需要频繁访问的成员声明为保护成员,这样就解决了在派生类中可以直接对这些原本在基类中的私有成员(现在为保护成员)进行操作,减少了访问基类的频繁度。这样看似保护成员和公有成员一样了,其实不是这样的,因为公有成员可以被外部(或称为类外)访问,而保护成员不可以被外部访问,,O(∩_∩)O~。。。。。。。
扩展一下:
保护成员的作用
1. 私有成员在派生类中是无权直接访问的,只能通过调用基类中的公有成员函数的方式实现。
2. 一定要直接访问基类中的私有成员,可以把这些成员说明为保护成员protected。一般格式:
{
1、不涉及派生时,保护成员与私有成员的地位完全一致。
#include <iostream.h>
//***************************************************
class samp
{
protected:
public:
};
//***************************************************
void main()
{
//
//
}
输出结果:10 20 33
2、以公有派生时:基类中的保护成员->在派生类中仍是保护的
//基类中的保护成员在公有派生的派生类中仍是保护的
#include <iostream.h>
//**********************************************************
class base{
protected:
public:
};
class derive:public base{
public:
};
//**********************************************************
void main()
{
}
输出结果:2 4 3
3、以私有派生时:基类中的保护成员à在派生类中是私有的。
// 保护性成员在私有派生时,为私有的
#include <iostream.h>
//******************************************************
class
base
{
protected:
public:
};
//drive1中,a、seta都变成私有的成员
class derive1:private
base
{
protected:
public:
};
//derive2中a、b和seta均为私有的成员,setb仍为公有的
class derive2:public
derive1
{
public:
};
//******************************************************
void main()
{
}
输出结果:
实际上,私有和保护这两个关键字的性质很相似,一旦用其中一个对类成员进行了定义,那外部对这个类成员是无法访问的,但在涉及到派生时,他们在派生类里的属性就改变了:
保护成员,在公有派生时仍是保护的,在私有派生时,变成私有的了,但派生类可以访问此成员;
而私有成员,在派生时,无论是私有的还是公有的,派生类都不能直接访问此成员。这就是两者的关键。