4

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

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

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

4

7 回答 7

19

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

于 2009-04-13T12:04:24.903 回答
6

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

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

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

于 2009-04-13T12:07:59.997 回答
5

来自维基百科(你要求一个确切的定义):

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

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

于 2009-04-13T12:07:13.150 回答
2
class A {
    int a;
    Foo *f;
    static int b;
};

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

于 2009-04-13T12:12:28.520 回答
2

我是 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" 
于 2009-04-13T12:13:49.233 回答
1

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

您的定义定义了一个对象,它是一种类型的实例。

于 2009-04-13T12:06:39.830 回答
0

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

于 2009-04-13T12:06:15.120 回答