1

Тема: Конструктор копіювання

class symb {
private:
    int A;
public:
    symb() {}
    symb(const symb &X) {
        X.show();
    }
    void show() {
        cout << "123";
    }
 
};
void main() {
    symb C;
    symb B = C;
}

Компілятор рядок 7 підкреслює червоним і пише: error C2662: void symb::show(void): неможливо перетворити покажчик "this" з "const symb" в "symb &"
об'єкт містить кваліфікатори типу, несумісні з членом функцію "symb :: show" тип об'єкту: constsymb

Чому не можна отримати доступ до функції show () об'єкта C з конструктора копіювання?
Та ще: чому з функції main не можна отримати доступ до змінної A об'єкта C (що логічно, адже вона private), а з конструктора копіювання, який викликається для об'єкта B - можна?

2

Re: Конструктор копіювання

1. Бо ви функцію show проголосили неконстантною, про що і (трохи надто розлого) пише компілятор. Рядок 9 має бути

    void show() const {

2. Бо конструктор - це функція того ж класу.

Подякували: leofun011