为什么不能将父指针分配给子指针?

时间:2021-01-16 07:46:17

标签: c++ oop inheritance

我有一个简单的继承案例:

state

如果我将子指针分配给父指针,则完全合法:

class Person {
public:
    const char* name;
public:
    Person()
        : name("Unknown person") {}
    
    Person(const char* name)
        : name(name) {}
};

class Student : public Person {
public:
    Student()
        : Person("Unknown Student") {}
};

但是如果我用另一种方式,将父指针分配给子指针,则会导致错误:

Student *s = new Student();
Person *p = s;

错误是:从‘Person*’到‘Student*’的转换无效。

一个可能有用的例子是:我有一个 Person 类,并且取决于这个人在生活中会做什么,我会将它转换为学生、老师等。

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

Person *p = s;

之所以有效,是因为每个 Student 也是一个 Person

Student *s = p;

不起作用,因为 Person 不一定是 Student

相关问题