【发布时间】:2017-07-05 22:14:45
【问题描述】:
我有一个从接口派生的类和派生类的朋友类。我想访问被实例化为接口的派生类的成员。它看起来像这样:
界面:
class AInterface
{
public:
virtual ~AInterface() = default;
virtual void set(int a) = 0;
};
派生类 A 和朋友类 B:
class B;
class A : public AInterface
{
public:
~A() override {}
void set(int a) override
{
mem = a;
}
private:
friend class B;
int mem = 0;
};
B 类:
class B
{
public:
B()
{
a = new A();
a->set(3);
}
int get_a()
{
// Access mem since it's a friend class
return a->mem;
}
private:
AInterface *a;
}
主要:
int main()
{
B *b = new B();
std::cout << b->get_a() << std::endl;
return 0;
}
程序无法编译,说 AInterface 没有名为“mem”的成员。 我是否需要接口中的getter函数并在A中实现它来实现这一点,还是有其他方法可以做到这一点?
【问题讨论】:
-
提示:如果你做到
public,它会起作用吗? -
@juanchopanza 它会起作用,但我想保密并遵循原则。
-
你试过了吗?
-
@juanchopanza 现在尝试了。不工作
-
是的,接口中需要getter函数,并在A中实现,函数必须是虚函数。
标签: c++ class interface friend