Я пытаюсь создать иерархию классов, каждый класс содержит вложенную структуру, содержащую данные.Указатель на тип объекта
////////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;
}
Итак, что я пытался сделать это после того, как объявить элемент типа С, чтобы получить доступ к наследуемой функции из B, который имеет доступ к данным структуры языка C. Указатель void не будет выполнять задание, поскольку он не может указывать на типы объектов. Я пробовал передать адрес C в B, хотя они оба разных типа. Прежде всего, если я получаю доступ к v1 из основного блока, если я установил для него значение, как показано в примере, я получаю правильное значение - значение, которое я установил. Однако, если я попытаюсь получить доступ к одной и той же переменной, но вместо этого из класса B, она печатает значение, как если бы оно не было установлено раньше, кроме как из конструктора. Поэтому я пытаюсь создать ссылку из класса B в структуру данных класса C - в структуру данных класса B данных родительского класса B. Код примера не был скомпилирован. С уважением!
Возможно, код, который компилирует может помочь. В 'A :: dataA' нет элемента данных' var1', поэтому разыменование 'this-> get-> var1' в инструкции printf недопустимо. Это не единственная проблема (очевидно). – WhozCraig
@WhozCraig Я считаю, что все должно быть хорошо – user203432
Вы понимаете, что ваши комментарии относительно «prints -1, -1» и т. Д. Неверны? Я немного смущен в отношении того, чего вы пытаетесь достичь, и каков ваш реальный вопрос. –