我想在c ++中创建一个类层次结构,因此更高级别类的公共变量在较低级别的类中可见。这是一个例子,所需的动作是两个构造函数的“printf”。现在,在类Local1中看不到变量a。怎么解决?通常,类将在不同的文件中定义。谢谢。
class Global
{
int a;
Local1 l1;
}
class Local1
{
int b;
Local2 l2;
Local1(){printf("%i", a);}; #constructor
}
class Local2
{
Local2(){printf("%i, %i", a, b);}; #constructor
}
main()
{
Global g;
# want to create objects g, l1, l2, and print values of a and a,b
}
答案 0 :(得分:0)
难道你不能简单地向孩子传递指向父母的指针,就像下面的天真例子一样吗?
#include<memory>
#include<iostream>
struct P {
struct C {
C(P *parent): p{parent} { }
void foo() {
std::cout << p->i << std::endl;
}
P *p;
};
int i;
C c{this};
};
int main() {
P p;
p.i = 42;
p.c.foo();
}
答案 1 :(得分:0)
您可以使用继承。
Local2继承自Local1。 Local1继承自Global。
class Global
{
public:
int getA() {
return a;
}
virtual void doStuff() {
// do stuff
}
private:
int a;
};
class Local1 : public Global
{
public:
Local1(){
printf("%i", getA());
}
int getB() {
return b;
}
private:
int b;
};
class Local2 : public Local1
{
public:
Local2(){
printf("%i, %i", getA(), getB());
}
virtual void doStuff() override {
// do specific stuff
}
};
int _tmain(int argc, _TCHAR* argv[])
{
auto g = std::unique_ptr<Global>(new Local2());
g->doStuff(); // will call Local2::doStuff
}