我一直在尝试创建一个类的层次结构,让每个类都包含一个包含数据的嵌套结构。指向对象类型的指针
////////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的数据结构。示例代码尚未编译。 关心!
也许代码编译可能的帮助。在A :: dataA中不存在数据成员'var1',所以在printf语句中取消引用this-> get-> var1'是无效的。这不是唯一的问题(显然)。 – WhozCraig 2013-02-22 22:12:17
@WhozCraig我相信现在应该没问题了 – user203432 2013-02-22 22:23:40
你确实意识到你对“打印-1,-1”的评论是不正确的,对吧?我对你想要达到的目标以及你的实际问题有些困惑。 – 2013-02-22 22:25:06