使用静态函数在类中存储非静态对象

时间:2013-01-29 03:55:43

标签: c++ static

我有两个班级(非静态)A& (静态)B。 我试图将对象A存储到B中,以便我可以在funcB()中使用它的函数。 但是我知道静态类不能存储非静态变量&功能。无论如何都要通过这个而不是将A类转换成静态类?

class A
{
   public:
          A();
          void funcA();
   private:
          int A;
};

class B
{
   public:
         B(A *objA);
         static void funcB();
   private:
         A *objA;
};

编辑: 我说静态类让它更容易解释。我不知道正确的用语。 所以问题实际上是:我如何使用静态函数中的非静态成员?

2 个答案:

答案 0 :(得分:1)

您无法从静态函数本身访问特定于类实例的任何内容。静态函数没有“this”指针(编译器将指针传递给调用非静态函数函数的对象实例)。您可以通过将指针传递给要修改的对象来解决这个问题,但是为什么要使用静态函数呢?我的建议是避免你想要做的事情,但我提供了两种方法来做到这一点(作为一个很好的学习例子)。

请参阅下文,了解使用

的示例
    #include <iostream>

using namespace std;

class A
{
   public:
    A(int value) : a(value){}
          void funcA();
   public:
          int a;
};

class B
{
   public:
         B()
         {
             objA = new A(12);
         }

         void funcB2()
         {
             B::funcB(*objA);
         }

         static void funcB(A const & value)
         {
            cout << "Hello World! " << value.a << endl;
         }

   private:
         A *objA;
};

int main()
{
    A a(10);
    B::funcB(a);

    B b;
    b.funcB2();
    return 0;
}

答案 1 :(得分:0)

我认为你不应该像这样设计。当非静态成员未准备好时,将初始化静态函数。你说“A类,链接到许多其他类,并存储了许多其他信息。另一方面,B类由于某些Windows API线程条件而必须是静态的。” 。在这种情况下,您可以更改设计并将A转换为静态类吗?