从子级访问父类的公共变量(c ++中的嵌套类)

时间:2016-02-24 17:22:03

标签: c++ class nested

我想在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 
    }

2 个答案:

答案 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
}