首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在具有静态函数的类中存储非静态对象

问在具有静态函数的类中存储非静态对象
EN

Stack Overflow用户
提问于 2013-01-29 11:55:43
回答 2查看 550关注 0票数 0

我有两个类(非静态的)A&(静态的) B。我试图将对象A存储到B中,这样我就可以在funcB()中使用它的函数。但是,我知道静态类不能存储非静态变量和函数。有没有办法传递这个而不是把类A转换成静态类呢?

代码语言:javascript
复制
class A
{
   public:
          A();
          void funcA();
   private:
          int A;
};

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

编辑:为了便于解释,我声明了静态类。我不知道正确的术语。所以实际上问题是:如何使用静态函数中的非静态成员?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-29 12:25:36

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

请参阅下面的示例,了解使用

代码语言:javascript
复制
    #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
EN

Stack Overflow用户

发布于 2013-01-29 12:14:17

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14575397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档