假设我有两个班级Class A
和Class B
。
class A {
uint32 A_1;
uint32 A_2;
uint32 A_3;
uint32 A_4;
}
第一个问题:如何让A类的班级成员对于从班级B创建的对象uint_32 A_1, A_2, A_3, A_4
可见?
//从B类创建的对象如下:
Object_B = new Class B();
我的语法使得A类对B类可见,第一个问题如下:
Class A(Class B *);
第二个问题:如何通过我创建的对象uint_32 A_1, A_2, A_3, A_4
访问A类的类成员(Object_B
)?
以下是第二个问题的语法:
Object_B->A_1;
两个类的上述语法是否正确?
另外,请为我提供一些很好的C ++类对象链接,以便我可以深入阅读。
答案 0 :(得分:3)
new A( B * bPointer);
告诉我们A类型的对象拥有一个指向B类型的指针。 这绝不会将B与A联系起来。
事实上,如果这是一个精心设计的课程,B不应该知道A.这使你的第二个问题没有实际意义。所以你应该问的重要问题是,为什么你想要这种关系。 A和B之间的语义关系是什么?
是书(页面*页面)吗?
答案 1 :(得分:0)
受保护的成员(仅限C ++)
使用以下其中一项,可以由从该基类派生的任何类的成员和朋友访问受保护的非静态基类成员:
指向直接或间接派生类的指针 对直接或间接派生类的引用 直接或间接派生类的对象
如果类是从基类私有派生的,则所有受保护的基类成员 成为派生类的私人成员。
如果在朋友或派生类B的成员函数中引用基类A的受保护非静态成员x,则必须通过指向,引用或从A派生的类的对象来访问x。但是,如果要访问x以创建指向成员的指针,则必须使用命名派生类B的嵌套名称说明符限定x。以下示例演示了这一点:
class A {
public:
protected:
int i;
};
class B : public A {
friend void f(A*, B*);
void g(A*);
};
void f(A* pa, B* pb) {
// pa->i = 1;
pb->i = 2;
// int A::* point_i = &A::i;
int A::* point_i2 = &B::i;
}
void B::g(A* pa) {
// pa->i = 1;
i = 2;
// int A::* point_i = &A::i;
int A::* point_i2 = &B::i;
}
void h(A* pa, B* pb) {
// pa->i = 1;
// pb->i = 2;
}
int main() { }