类变量,作用域仅限于功能

时间:2019-03-27 17:38:31

标签: c++

成员函数将被重复调用。
我想每次将内存分配给局部变量都是很耗时的。
一种解决方案是在类声明中声明这些变量。
但是我不希望它们对同一类的其他函数可见。
有办法吗?
试图使用名称空间,但是没有用。

class A
{
    int n;                  // only function 'One' should see 'n'

    public:
        A(void);            // default constructor
        int One(void);      // member function
        int Two(void);      // member function
};


A::A(void)                  // default constructor
{
     n = 7;
}


int A::One(void)            // function 'One'
{
    return n;               // no time lost declaring 'n'
}

int A::Two(void)            // function 'Two'
{
    int n = 7;              // obligatory, no other 'n' available
    return n;
}

2 个答案:

答案 0 :(得分:2)

您看到错误的问题/问题

  • 如果您总是希望给定的方法返回给定的值,无论实例和历史记录是什么,当然不使用该属性
  • 如果属性的值取决于实例,请使用(非静态)属性
  • 如果该值不依赖于实例,但可以在执行期间更改,请使用类实例(例如 static
  

但是我不希望它们对相同类的其他函数可见。

仅使用可见性是不可能的,该类的所有方法都可以(幸运地)访问该类的属性,这不是问题,因为该类知道它的作用。当然,该属性必须至少受保护

无论如何

  • 如果值不取决于实例,则可以使用方法中定义的静态var。
  • 否则,您可以在方法中使用 map 定义的 static ,其中键是实例,值是期望值,但是这样做会使方法复杂化,因为您至少需要考虑实例的删除。我鼓励您不要做这样的 gaz工厂

答案 1 :(得分:1)

分配局部变量不是很费时,它们是在大块中分配的调用堆栈的一部分。您打算做的事情与良好做法相反。优良作法是在尽可能小的范围内声明变量。 同样,您不能在同一类的成员函数中隐藏字段。