c++访问超类中受保护的数据



大家好,有人能帮帮我吗?

#include <iostream>
using namespace std;
class A
{
private:
int a;
protected:
int b;
void set_value(int y, int u, int i)
{
a = y;
b = u;
c = i;
}
public:
int c;
};
class B : private A
{
public:
A::set_value;       //Compilation Error !
A::b;               //Compilation Error !
};
int main()
{
B b;
b.set_value(1,1,1);   //Compilation Error !
cout<<b.b;            //Compilation Error !
}

如何使用子类

直接访问父类中的受保护成员(不使用get()或set())

引用自cppreference(强调我的)

Using-declaration将基类的成员引入派生类定义,例如将基类的受保护成员暴露为派生类的公共成员。.

所以解决方案是这样写类:

class B : private A
{
public:
using A::set_value;       
using A::b;               
};

完整的例子在这里。

访问声明似乎在c++ 98中被弃用,最终在c++ 11中被删除。

首先,当我使用clang++时,它在编译时显示错误,当我使用g++编译器9.3.0版本时,它可以正常工作谢谢。

最新更新