![](/img/trans.png)
[英]How do I access to private member variable from another class whose member variable is instance of first class?
[英]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.