Невозможно инициализировать указатель на подкласс с базовым значением r. - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть вопрос относительно проблемы на экзамене C ++.У меня был довольно спор с помощником преподавателя, и я хочу знать, пропустил ли я что-то.

Дан следующий код:

class Student {
public:
  virtual void checkFinanes() {
    std::cout << "I have no money. \n";
  }
};

class ExonomyStudent : public Student {
public:
  virtual void checkFinances() {
    std::cout << "I am making a lot of money.\n";
  }
};

Вопрос:

Компилируется ли следующий код?Если так, то каков вывод на консоль, когда я ожидаю.Если нет, то почему нет?

Student student;
student.checkFinances();
EconomyStudent* economyStudent = &student;
economyStudent->checkFinances();

И ответ должен быть:

Не компилируется.Невозможно инициализировать EconomyStudent * со значением Student.

Я знаю и понимаю, что нельзя инициализировать указатель на подкласс с адресом объекта базового цикла и что он не компилируется.Чего я не понимаю, так это ценности.Действительно ли важно, чтобы rvalue был указан, чтобы сделать ответ действительным?Мой ассистент настаивал, но я так не думаю.Что ты думаешь?

1 Ответ

0 голосов
/ 18 декабря 2018

Неужели так важно, чтобы было указано значение rvalue, чтобы сделать ответ верным?

Я так не думаю.Проверьте случай, когда вы пытаетесь инициализировать EconomyStudent *economyStudent с lvalue:

 Student student;
 student.checkFinances();
 Student *lvalue = &student;
 EconomyStudent* economyStudent = lvalue;

clang жалуется на мой компьютер, утверждая, что

ошибка: не может инициализировать переменнуютип 'EconomyStudent *' с lvalue типа 'Student *'

Следовательно, единственное различие с точки зрения вывода компилятора - это rvalue и lvalue.Поскольку категория значений не имеет ничего общего с типом ошибки во фрагменте, вы можете сказать своему ассистенту, что какой-то случайный пользователь в Интернете считает, что вы правы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...