无法用基本clase rvalue初始化指向子类的指针

Cannot initialize pointer to a subclass with base clase rvalue

本文关键字:子类 指针 初始化 rvalue clase      更新时间:2023-10-16

我对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();

答案应该是:

不编译。不能用学生rvalue初始化经济研究。

我知道并理解,一个人不能初始化指向子类的指针,并使用基本群的对象的地址和地址,并且这不会编译。我不明白的是rvalue。据说Rvalue要使答案有效吗?我的助教坚持认为,但我不这么认为。你怎么看?

指定RVALUE使答案有效吗?

我不这么认为。检查尝试使用lvalue初始化EconomyStudent *economyStudent的情况:

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

clang在我的机器上抱怨,说

错误:不能用类型的" student *"类型的"经济研究 *"类型的变量 *

因此,编译器输出方面的唯一差异是RVALUE与LVALUE。由于值类别与摘要中的错误类型无关,因此您可以告诉助教,互联网上的某些随机用户认为您是对的。