Професионална програма
Loading...
Milan_Popov avatar Milan_Popov 17 Точки

конструктор и копи-конструктор

Моля Мартин да се върне малко и да обясни за конструктор и копи-конструктор. На мен не ми е ясно какво става след двете точки в долния ред.

Car(float aPrice) : price(aPrice)

Ето и целия клас от пример Lecture_4_1.

class Car
{
    bool needsARepair;

public:
    Car() {};
    Car(float aPrice) : price(aPrice) {
        needsARepair = true;
    };
    float price;

    friend void Man::crashACar(Car &aCar);
    friend class Mechanic;

};

Доколкото знам след ":" се извиква конструктора на базовия клас като в скобите му се подават аргументи. Но тук няма наследяване а отгоре на всичко "price" е променлива. Защо се прави всичко това? Каква е ползата?

Тагове:
0
C++ Programming
Filkolev avatar Filkolev 4482 Точки

Car(float aPrice) : price(aPrice) не е извикване на базов конструктор, а по-различен синтаксис за инициализация на променлива в конструктора (преди другите стейтмънти в него).

Т.е. това:

Car(float aPrice) : price(aPrice) {
    needsARepair = true;
};

е аналогично на това:

Car(float aPrice)  {
    price = aPrice;
    needsARepair = true;
};

Също така това не е copy-constructor. При него идеята е, че получаваш като параметър референция към обект от същия клас, примерно:

Car(const Car& aCar) : price(aCar.aPrice), needsARepair(aCar.needsARepair) {};

1
01/07/2016 19:14:44