繁体   English   中英

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

[英]How to access a public member variable from another class thru an interface?

鉴于我有这些类,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;}
}

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

谢谢你。

从 BClass,您不能访问任何未在 IAClass 中定义的内容。 恕我直言,这就是拥有接口的全部意义,即将实现细节与接口分开。

你的代码没有反映你的意愿。 你想让 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

该成员在Aclass ,这不是Bclass看到的: Bfunction只看到一个IAclass

所以你必须让x1成为IAclass的公共成员,或者给Bclass实际的Aclass对象。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM