7.类的访问控制和继承

在C++中,我们使用访问说明符加强类的封装性。

访问说明符有:public、private、protected

1)定义在public说明符之后的成员在整个程序内可以被访问,public成员定义类的接口

2)定义在private说明符之后的成员可以只能由类的接口访问,private部分封装了(隐藏了)类的实现细节。

3)由于我们定义的类希望某些成员可以在类的继承过程中和派生类分享,而不被其他公共部分访问,因此便设定protected说明符。定义在protected访问符之后的成员,常用于派生类和友元。


什么是友元?

友元分友元函数和友元类。类与类或函数之间要进行某些相关操作,就要用到友元!有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该类的友元函数。除了友元函数外,还有友元类,两者统称为友元。 如果一个类指定了友元类,则友元类的成员函数可以访问包括此类非公有成员在内的所有成员!友元能够使得普通函数直接访问类的保护数据,避免了类成员函数的频繁调用,可以节约处理器开销,提高程序的效率,但所矛盾的是,即使是最大限度的保护,同样也破坏了类的封装特性,这即是友元的缺点。

使用友元类时注意:
(1) 友元关系不能被继承。 
(2) 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
(3) 友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的声明。

 


其实在C++中,struct和class的差别也在于此!class可以看成是struct的加强版

struct的默认访问说明符是public,默认public继承;class的默认访问说明符是private,默认private继承


在继承机制中,有派生访问说明符。分为:public、private、protected

要深刻理解下面这两句话:

1)派生访问说明符对于派生类的成员(及友元)能否访问其直接基类成员没有什么影响。对基类成员的访问权限只和基类的访问说明符有关。

2)派生访问说明符的目的是控制派生类对象(包括派生的派生)对于基类成员的访问权限。(查看本博客C++模块第8篇文章

 

简单测试一下:

using namespace std;
class A
{
	int a = 3;
public:
	int fun() { int b = a; cout << a << endl; return a; }
};


class B:public A
{
	using A::fun;
public:
	void fun(int c) { int b = fun()+c; cout << b << endl; }
};






int main()
{
	B b;
	b.fun(6);
	system("pause");
	return 0;
}

总的来说,派生类的对象想要访问基类的某个成员,你得首先看看派生类对于基类的继承形式是怎样的!基类在不同的继承形式下,它的成员在派生类中具有不同的访问属性!(查看本博客C++模块第8篇文章);而派生类的成员或者友元要访问其基类的成员函数时,只与基类中的访问说明符有关!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值