【问题标题】:What is the exact definition of instance variable?实例变量的确切定义是什么?
【发布时间】:2010-10-19 03:01:03
【问题描述】:

我认为实例变量是简单的数据类型,如 int 或 double。创建对象时自动创建的所有内容。

如果一个对象创建了额外的对象 - 就像它使用 NEW 关键字所做的一切 - 这些不是实例变量。

我是对还是错? 确切的定义是什么?

【问题讨论】:

  • 您寻求什么定义?与语言无关,还是特定于 C++?如果是后者,则有一个非静态数据成员的定义。但是据我所知,C++ 中没有“实例变量”的定义。

标签: c++ class instance-variables


【解决方案1】:

错了。绑定在实例中的任何东西(即实例化对象)都是实例变量。与绑定到类的静态(类)变量相反。它们是简单类型还是指向对象的指针都没有关系。

【讨论】:

  • +1,暂定。 指向对象的指针是实例变量,它们指向的对象不是。
  • 我认为 vartec 是对的。这是与语言无关的答案。即使指向的对象不是 c++ 意义上的成员,它仍然绑定到它。
  • @Pax: true,但是如果堆上有对象,那么指针是唯一的访问方式。
【解决方案2】:

这取决于对象创建它们的时间和地点。如果它们在类级别声明,但仅在实例化后创建,它们仍然是实例变量。如果它们都在函数中声明和创建,它们是局部变量,而不是实例变量。

【讨论】:

    【解决方案3】:

    实例变量(又名字段)是属于实例的变量,而不是属于静态变量和属于本地堆栈帧的局部变量。

    你的定义定义了一个object,它是一个类型的一个实例。

    【讨论】:

      【解决方案4】:

      来自Wikipedia(您要求准确定义):

      在使用类的面向对象编程中,实例变量是在类中定义的变量,类中的每个对象都有一个单独的副本。

      实例变量是相反的 类变量,它是一个特殊的 实例成员的类型。

      【讨论】:

        【解决方案5】:

        实例变量是可以与类的实例相关联的变量。例如,如果您有

        class A
        {
        private:
        int m_a;
        double m_b;
        int* m_c;
        };
        

        并且如果您创建 A 的对象(即实例),则会创建 m_a、m_b、m_c 的一个实例并与之关联。所以这些成为实例变量。同时,如果您在类中有一个静态变量,则静态变量实例不与该类的每个对象相关联,因此它不是实例变量。 NEW 或创建堆栈对象只是创建对象的方法,因此与实例变量无关。

        【讨论】:

          【解决方案6】:
          class A {
              int a;
              Foo *f;
              static int b;
          };
          

          a 是一个实例变量。 b 不是。指针f本身就是一个实例变量,f所指向的对象(用new创建)不是一个实例变量,因为它甚至不是一个变量,即使它仍然是实例状态的一部分。

          【讨论】:

          • +1 用于区分指针和对象,但对象仍然是变量。我可以设想 f 是指向链表上第一个节点的指针,设置为 A::add(Foo*) [即,在 A 的范围之外创建] - all 该列表中的节点将是变量,但既不是实例也不是类。
          • 但这些只是指向/引用同一个对象的其他变量。对象只是内存中的字节。可能有变量指向 A 范围之外的同一个对象,但 这些 是变量,而不是对象。
          • 标准说“一个变量是由对象的声明引入的。变量的名称表示对象”。如果您新建了某个对象,则不会声明该对象。我认为跳棋是对的。一个对象只是一个内存范围(但在 C++ 中总是具有关联的类型,与 C 相反)
          【解决方案7】:

          我是 OOP 概念的新手,但我会尽力而为。

          是的,实例变量是具有普通数据类型的变量,但它们属于特定的 OBJECT 实例。实例变量是描述对象的“特征”或“属性”的变量。例如carColor, carName 可以是“Car”类的实例变量,因为它描述了对象汽车的特性。

          当使用关键字“new”实例化一个新对象时,所有实例变量都会自动附加到该对象上,并且可以单独跟踪。例如

          var carA = new car
          carA.carName = "Honda" 
          carA.carColor= "Blue" 
          
          var carB = new car
          carA.carName = "Austin" 
          carA.carColor= "Red" 
          

          【讨论】:

            猜你喜欢
            • 2012-10-20
            • 2010-10-21
            • 1970-01-01
            • 2011-05-25
            • 1970-01-01
            • 1970-01-01
            • 2013-05-17
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多