继承的访问控制_保护继承_保护成员的声明(C++语言)

保护成员的声明,

保护成员用关键字protected声明,

它可以放在类声明的任何地方,

通常放在私有成员和公有成员之间,

------------------------------------------------------------

其声明的一般形式为:

class 类名

{

          private:

                  //私有成员

          protected:

                 //保护成员

          public:

                 //公有成员

};

----------------------------------------------------------------

例如,下面程序创建类Base的对象ob,

在使用该对象访问类中的私有成员和保护成员时需要通过公有函数来实现。

#include <iostream>
using namespace std;
class Base
{
private://-------------定义私有成员
int a;
protected:
int b;//------------声明b为保护成员
public:
int c;
void setab(int x, int y)
{
a = x;//----------给私有成员赋值
b = y;//----------给保护成员赋值
}
int geta()
{
return a;
}
int getb()
{
return b;
}
};


int main()
{
Base ob;
//ob.a=10;//-----------非法,外部函数不能访问类的私有成员
//ob.b=20;//-----------非法,外部函数不能访问类的保护成员
ob.c = 30;//-----------合法,类函数能访问类的公有成员
cout << ob.geta() << "  " << ob.getb() << "  " << ob.c << endl;
ob.setab(10,20);//------------通过调用公有成员函数给私有和保护数据成员赋值
cout << ob.geta() << "  " << ob.getb() << "  " << ob.c << endl;
system("pause");
return 0;
}

---------------------------------------------------------------------------------------------------------------

运行结果:


------------------------------------------------------------------------------------------

在上述代码主函数main()中,

由类Base创建了对象ob直接访问私有成员a和保护成员b都是非法的。

如果要访问私有成员和保护成员,

必须通过公有成员函数来访问,

上述示例是通过setab()成员函数来实现的。

了解保护成员的概念后,

再来看保护成员被继承后访问特性的变化。

由于继承的方式不同,

----------------------------------------------------------------------------------

因此保护成员被继承后其访问特性相应如下:

1.若为公有继承,

   则基类中的保护成员在派生类中也为保护成员,

   可被派生类直接访问,

   但不能被外部函数直接访问,

   外部函数只能通过派生类的对象间接访问它们。

2.若为私有继承,

    则基类中的保护成员在派生类中成为私有成员,

    派生类可直接访问它们,

    但外部函数或在类外通过派生类的对象都不能访问它们。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值