Рубрики

C ++ | Наследование Вопрос 13

#include<iostream>

using namespace std;

  

class Base1

{

public:

    char c;

};

  

class Base2

{

public:

    int c;

};

  

class Derived: public Base1, public Base2

{

public:

    void show()  { cout << c; }

};

  

int main(void)

{

    Derived d;

    d.show();

    return 0;

}

(A) Ошибка компилятора в «cout << c;»
(B) стоимость мусора
(C) Ошибка компилятора в «производном классе: публичный Base1, публичный Base2»

Ответ: (А)
Объяснение: Переменная 'c' присутствует в обоих суперклассах Derived. Так что доступ к «с» неоднозначен. Неоднозначность можно устранить с помощью оператора разрешения области видимости.

#include<iostream>

using namespace std;

  

class Base1

{

public:

    char c;

};

  

class Base2

{

public:

    int c;

};

  

class Derived: public Base1, public Base2

{

public:

    void show()  { cout << Base2::c; }

};

  

int main(void)

{

    Derived d;

    d.show();

    return 0;

}

Тест на этот вопрос

Рекомендуемые посты:

C ++ | Наследование Вопрос 13

0.00 (0%) 0 votes