基类对象和派生类对象之间的赋值关系具体是指:基类的对象可不可以赋值给子类对象或者子类对象可不可以赋值给基类对象。
一般来说,只有派生类的对象可以赋值给基类的对象,反之,则不可以。例如:
Father a ; // 基类对象
Son b ; // 派生类对象
a = b ; // 可以
b = a ; // 不可以
为什么派生类对象可以给基类对象赋值呢?反之则不可以呢?这是因为基类对象a的成员比派生类对象b的成员少。所以基类对象赋值给派生类对象时会出错。上面是一种情况,还有另外一种情况:
Father a ; // 基类对象
Son b ; // 派生类对象
Father *pa = &b ; // 可以
Son *pb = &a ; // 不可以
上面的指针赋值也就是说:基类的指针可以指向派生类对象,但是反过来则不行,派生类的指针不可以指向基类的指针。这是为什么呢?这是因为派生类的对象所占的存储空间通常要比基类的对象大,原因就是派生类除了继承基类的成员之外,还拥有自己的成员,所以基类的指针操作派生类的对象时,由于基类指针会向操作基类对象那样操作派生类对象,而基类对象所占用的内存空间通常小于派生类对象,所以基类指针不会超出派生类对象去操作数据。
同样的道理,基类的引用可以作为派生类对象的别名,但是反过来则不行,派生类的引用不可以作为基类对象的别名。例如:
Father a ; // 基类对象
Son b ; // 派生类对象
Father &f = b ; // 可以
Son &s = a ; // 不可以