21xrx.com
2024-12-22 20:54:05 Sunday
登录
文章检索 我的文章 写文章
如何让C++私有继承的派生类访问基类?
2023-07-05 13:40:44 深夜i     --     --
C++ 私有继承 派生类 访问基类

C++中,私有继承是一种非常基础的继承方式,它能使派生类获得基类的所有成员,但是这些成员都变成了私有成员,只能在派生类内部使用,无法被外部访问。所以,如何让C++私有继承的派生类访问基类呢?

第一种方法是将基类的成员函数设为protected,这样派生类就可以访问基类的成员函数了。这是一种比较简单的方法,但是它只适用于成员函数,对于成员变量并不适用。

第二种方法是在派生类中添加一个公有函数,通过这个函数来访问基类的私有成员。这个函数可以是派生类的友元函数,或者是派生类自己的成员函数。以友元函数为例,代码如下:


class Base

{

private:

  int value;

public:

  Base() {}

  ~Base() {}

  int getValue() const return value;

};

class Derived: private Base

{

public:

  Derived() {}

  ~Derived() {}

  friend int getValueFromBase(const Derived& d) return d.value;

};

int main()

{

  Derived d;

  std::cout<<getValueFromBase(d)<<std::endl;

  return 0;

}

在这个例子中,派生类Derived中声明了一个友元函数getValueFromBase(),然后在main()函数中调用这个函数来访问Base类的私有成员value。

第三种方法是在基类中声明一个公有的getter函数,然后在派生类中调用这个函数来获取基类的私有成员。这个方法适用于成员变量和成员函数,代码如下:


class Base

{

private:

  int value;

public:

  Base() {}

  ~Base() {}

  int getValue() const return value;

};

class Derived: private Base

{

public:

  Derived() {}

  ~Derived() {}

  int getBaseValue() const { return Base::getValue(); }

};

int main()

{

  Derived d;

  std::cout<<d.getBaseValue()<<std::endl;

  return 0;

}

在这个例子中,派生类Derived中声明了一个公有的成员函数getBaseValue(),然后在这个函数中调用了基类Base中的getValue()函数。

总的来说,以上三种方法都可以让C++私有继承的派生类访问基类的私有成员。但是,不同的方法适用于不同的场景和需求,开发人员需要根据具体情况选择合适的方法。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复