Рубрики

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

Вывод следующей программы?

#include <iostream>
#include<string>

using namespace std;

  

class Base

{

public:

    virtual string print() const

    {

        return "This is Base class";

    }

};

  

class Derived : public Base

{

public:

    virtual string print() const

    {

        return "This is Derived class";

    }

};

  

void describe(Base p)

{

    cout << p.print() << endl;

}

  

int main()

{

    Base b;

    Derived d;

    describe(b);

    describe(d);

    return 0;

}

(А)

This is Derived class
This is Base class

(В)

This is Base class
This is Derived class

(С)

This is Base class
This is Base class

(D) Ошибка компилятора

Ответ: (с)
Объяснение: Обратите внимание, что объект Derived передается в description (d), но вызывается print Base. Функция description принимает параметр базового типа.

Это типичный пример среза объекта, когда мы присваиваем объект производного класса объекту базового типа, объект производного класса отсекается, и все члены данных, унаследованные от базового класса, копируются. Нарезка объектов должна быть исключена, так как могут быть удивительные результаты, как указано выше. Как примечание, нарезка объектов невозможна в Java. В Java каждая не примитивная переменная на самом деле является ссылкой.
Тест на этот вопрос

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

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

0.00 (0%) 0 votes