我一直在尝试创建类的层次结构,让每个类都包含一个包含数据的嵌套结构。
////////Class.h////////////////////////////
#ifndef _CLASS_H_
#define _CLASS_H_
#include <stdio.h>
class A{//Base
protected:
struct dataA{
int v1, v2;
};
public:
A();
virtual void met1();
dataA * const set;
const dataA * const get;
};
class B : public A{//Child1
protected:
struct dataB : public dataA{
int v3, v4;
};
public:
B();
virtual void met2();
dataB * const set;
const dataB * const get;
};
class C : public B{//Child2
struct dataC : public dataB{
int v5, v6;
};
public:
C();
void met3();
dataC * const set;
const dataC * const get;
};
#endif
////////Class.cpp///////////////////////////
#include "Class.h"
A::A() : set( new dataA ), get( set ) {
this->set->v1 = -1;
this->set->v2 = -1;
}
void A::met1() {
printf( "%i, %i", this->get->v1, this->get->v2 );//PRINTS "-1, -1"
}
B::B() : A(), set( new dataB ), get( set ) {
this->set->v3 = -1;
this->set->v4 = -1;
}
void B::met2() {
printf( "%i, %i", this->get->v1, this->get->v2 );//An attempt to access C's "get" variable, PRINTS "-1, -1"
}
C::C() : B(), set( new dataC ), get( set ) {
this->set->v5 = -1;
this->set->v6 = -1;
}
void C::met3() {
printf( "%i, %i", this->get->v1, this->get->v2 );//PRINTS "2, 3"
}
///////main.cpp////////////////////////////////
#include "Class.h"
int main() {
C memb;
memb.set->v1 = 2;
memb.set->v2 = 3;
printf( "%i, %i", memb.get->v1, memb.get->v2 );//PRINTS "2, 3"
memb.met2();//PRINTS "-1, -1"
return 0;
}
所以,我一直在尝试做的是在声明 C 类型的成员之后,访问从 B 继承的函数,该函数可以访问 C 的数据结构。void 指针无法完成这项工作,因为它不能指向对象类型。我试过将 C 的地址传递给 B,不过,它们都是不同的类型。首先,如果我从主块访问 v1,只要我为它设置了一个值,如示例所示,我会得到一个正确的值——我设置的值。但是,如果我尝试访问相同的变量,但从 B 类中访问,它会打印该值,就好像它之前没有设置过一样,而不是来自构造函数。所以我试图创建一个从类 B 到类 C 的数据结构的链接 - 到类 C 的数据父类 B 的数据结构。示例代码尚未编译。问候!