Каково точное определение переменной экземпляра? - PullRequest
4 голосов
/ 13 апреля 2009

Я думаю, что переменные экземпляра - это простые типы данных, такие как int или double. Все, что создается автоматически при создании объекта.

Если объект создает дополнительные объекты - как и все, что делается с ключевым словом NEW - это не переменные экземпляра.

Я прав или нет? Какое точное определение?

Ответы [ 7 ]

18 голосов
/ 13 апреля 2009

Неправильно. Все, что связано внутри экземпляра (то есть экземпляр объекта), является переменной экземпляра. Как противоположность статических (классовых) переменных, которые связаны с классом. Не имеет значения, являются ли они простыми типами или указателями на объекты.

6 голосов
/ 13 апреля 2009

Переменные экземпляра - это те, которые могут быть связаны с экземпляром класса. Например, если у вас есть

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

и если вы создаете объект (то есть экземпляр) из A, создается один экземпляр m_a, m_b, m_c и связывается с ним. Таким образом, они становятся переменными экземпляра. В то же время, если внутри класса есть статическая переменная, экземпляр статической переменной не связан с каждым объектом класса, следовательно, он не является переменной экземпляра. NEW или создание стекового объекта - это просто способы создания объектов, и поэтому они не имеют ничего общего с переменными экземпляра.

5 голосов
/ 13 апреля 2009

Из Википедия (вы запросили точное определение):

В объектно-ориентированном программировании с классами переменная экземпляра - это переменная, определенная в классе, для которой у каждого объекта в классе есть отдельная копия.

переменная экземпляра противоположна переменной класса, и это особый тип члена экземпляра.

2 голосов
/ 13 апреля 2009

Я новичок в концепции ООП, но я буду стараться изо всех сил.

Да, переменные экземпляра - это переменные с обычными типами данных, но они принадлежат конкретному экземпляру OBJECT. Переменная экземпляра - это переменная, которая описывает «характеристику» или «свойство» объекта. например carColor, carName может быть переменной экземпляра класса "Car", поскольку она описывает характеристику объекта car.

Когда создается новый объект с ключевым словом "new", все переменные экземпляра автоматически присоединяются к объекту и могут отслеживаться отдельно. например

var carA = новая машина carA.carName = "Honda" carA.carColor = "Blue"

var carB = новая машина carA.carName = "Остин" carA.carColor = "Red"

1 голос
/ 13 апреля 2009
class A {
    int a;
    Foo *f;
    static int b;
};

a является переменной экземпляра. b нет. Указатель f является самой переменной экземпляра, объект , указанный f (созданный с помощью new), не является переменной экземпляра, поскольку он даже не является переменной, даже если часть состояния экземпляра.

1 голос
/ 13 апреля 2009

Переменные экземпляра (иначе поля) - это переменные, которые принадлежат экземпляру , в отличие от статических переменных , которые относятся к классу и локальным переменным принадлежат к фрейму локального стека .

Ваше определение определяет объект , который является экземпляром типа.

0 голосов
/ 13 апреля 2009

Это зависит от того, когда и где объект создает их. Если они объявлены на уровне класса, но созданы только после создания экземпляра, они все еще являются переменными экземпляра. Если они оба объявлены и созданы внутри функции, они являются локальными переменными, а не переменными экземпляра.

...