次の 3 つのクラスがあるとします。
class Animal {};
class Human : public Animal {};
class Dog : public Animal
{
public:
void setOwner(Animal* owner) { this->owner = owner; }
private:
Animal* owner;
};
以下が許可されているのはなぜですか。また、正確には何が起こっているのですか?
Dog d;
Human h;
d.setOwner(&h); // ?
最初はこのようにキャストしようとしたd.setOwner(&(Animal)h)
のですが、コンパイラから警告が出て、実行時エラーになってしまいました。
編集:コンパイラが私に与えた警告は「一時的なアドレスを取得しています」でした。これはなぜですか?