鉴于我有这些类,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的成员。
谢谢。
答案 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>
而不是原始指针。将为您节省大量内存泄漏!