CPP-101: Класове и обекти

Обекти

Дефиницията на класа може да се разглежда като шаблон, по който се създават обекти. Дефинирането на клас създава нов тип в областта на видимост, в която е направена дефиницията. За да се дефинира обект от даден клас, трябва да се дефинира променлива от съответния тип.

Point p;

Point* ptr=&p;
Point& ref=p;

При дефиниране на променлива от типа на даден клас се създава обект (екземпляр, инстанция) от класа. Всеки обект притежава собствено копие на член-променливите на класа. При създаването на обект се създават и екземпляри на всички член-променливи на класа, които стават „собственост“ на създадения обект.

За разлика от член-променливите, всички обекти си поделят само едно копие на член-функциите на класа. Независимо от броя на обектите в програмата има само едно копие на член-функциите на класа.

Нека като пример разгледаме класа Point дефиниран по следния начин:

class Point {
    double x_, y_;
public:
    void set_x(double x) {
        x_=x;
    }

    double get_x(void) {
        return x_;
    }
};

Нека са дефинирани два обекта p1 и p2 от типа Point. Всеки от тези обекти притежава собствено копие от нестатичните член-променливи x_ и y_.

int main() {
    Point p1, p2;
    p1.set_x(10);
    p2.set_x(20);
    p1.get_x();
    p2.get_x();
    ...
}

Когато методът get_x() се извиква чрез обекта p1, то използваната в метода член-променлива x_ принадлежи на обекта p1 (вж. ред 4).Когато методът get_x() се извиква чрез обекта p2, то използваната в метода член-променлива x_ принадлежи на обекта p2 (вж. ред 5). Като се използва методът set_x() се модифицира стойността на член-променливата x_ за съответния обект – в ред 2 член-променливата x_ на обекта p1 получава стойност 10, а в ред 3 член-променливата x_ на обекта p2 получава стойност 20.

Публикувано в CPP-101, ООП с етикети , , . Постоянна връзка.