谈谈 c++中的访问声明

本文通过一个具体的C++代码示例介绍了私有继承下如何使用访问声明来调整基类成员的可见性,使特定成员可以在派生类中被访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先给出代码:

#include<iostream>
using namespace std;
class A
{
public:
    A(int x1)
    {
        x=x1;
    }
    void show()
    {
        cout<<"x="<<x<<endl;
    }
private:
    int x;
};
class B:private A
{
public:
    B(int x1,int y1):A(x1)
    {
        y=y1;
    }
    A::show;
private:
    int y;
};
int main()
{
    B b(10,20);
    b.show();
    return 0;



访问声明机制可以个被调整私有派生类从基类继承下来的成员性质,从而使外界可以通过派生类的界面直接访问基类的某些成员,同时也不影响其他基类成员的访问属性。


访问声明在使用时应注意以下几点:

1  数据成员也可以使用访问声明。

例如:

class A

{

  public:

   int x2;

   ...

private:

  ...

};

class B:private A

{

public:

...

A::x2;

...

private:

...

};


2  访问声明中只含不带类型和参数的函数名或者变量名。如果把上面的访问声明写成:

void A::show;

A::show();

void A::show();

都是错误的。

3 访问声明不能改变成员在基类中的访问属性,也就是说,访问声明只能把原基类的保护成员调整为私有派生类的保护成员,把原基类的公有成员调整为私有派生类的公有成员。

但对基类的私有成员不能使用访问声明。 例如:

class A

{

  public: 

 int x1;

 protected:

 int x2;

 private:

 int x3;

}

class B:private A

{

   public:

   A::x1;  // T

A::x2;   //F 

A::x3;   //F 

  protected:

 A::x1;  //F

A::x2;  //T

A::x3;   //F

private:

A::x3;   //F

};

4  对于基类中的重载函数名,访问声明将对基类中所有同名函数起作用。这意味着对于重载函数使用访问声明时要慎重。



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿的探索之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值