[英]Cannot initialize pointer to a subclass with base clase rvalue
我對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初始化EconomyStudent *。
我知道並理解,不能初始化指向子類的指針和baseclase對象的地址,並且這不能編譯。 我不明白的是右值。 聲明rvalue以使答案有效是否真的很重要? 我的助教堅持但我不這么認為。 你怎么看?
聲明rvalue以使答案有效是否真的很重要?
我不這么認為。 檢查您嘗試使用左值初始化EconomyStudent *economyStudent
的情況:
Student student;
student.checkFinances();
Student *lvalue = &student;
EconomyStudent* economyStudent = lvalue;
clang
抱怨我的機器,說明這一點
錯誤:無法使用“Student *”類型的左值初始化“EconomyStudent *”類型的變量
因此,編譯器輸出方面的唯一區別是rvalue與lvalue。 由於值類別與代碼段中的錯誤類型無關,您可以告訴您的助教,互聯網上的一些隨機用戶認為您是對的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.