如何通过接口从另一个类访问公共成员变量?

时间:2015-07-30 12:00:26

标签: c++

鉴于我有这些类,Bclass的成员函数如何访问Aclass的成员变量。

class Aclass : IAclass {
public:
    int x1;
}


class IAclass { //IA is interface of A

}

class Bclass {
private
 IAclass * a[5];

void Bfunction(){ a[1]->x1;}
}

我尝试了[1] - > x1但是我收到了错误:IAclass没有名为x1的成员。

谢谢。

3 个答案:

答案 0 :(得分:4)

从BClass,您无法访问IAClass中未定义的任何内容。恕我直言,这是具有接口的全部要点,即将实现细节与接口分开。

答案 1 :(得分:1)

您的代码不符合您的意愿。你希望Aclass实现IAclass,但这里没有继承。

class IAclass { }

class Aclass : public IAclass {
public:
    int x1;
}

第二,你的编译器是对的。 IAclass没有x1成员。 “动物”有“尾巴”属性吗?不是必须的。 “蠕虫”没有尾巴。一只“猫”有尾巴。如果所谓的“动物”是“猫” - 我们首先需要将动物视为猫,而不是进入它的尾巴。  你需要将指针向下(向下投射)投射到正确的子类,然后访问变量:

Aclass* pA = (Aclass*)&a[1];
pA->x1;

当然,这里建议使用dynamic_cast来实际检查向下转发:

  Aclass* pA = dynamic_cast<Aclass*>(&a[1]);
  if (pA) {
  pA->x1;
  }

dynamic_cast将检查运行时的向下转换,如果向下转发失败,将返回nullptr

答案 2 :(得分:0)

该成员位于Aclass,而不是Bclass看到的内容:Bfunction只看到IAclass

因此,您必须让x1成为IAclass的公开成员,或者提供Bclass个实际Aclass个对象。

顺便说一句:更喜欢使用std::vector而不是数组,并且更喜欢使用shared_ptr<IAclass>而不是原始指针。将为您节省大量内存泄漏!