C++ 中,类型的匹配检测是非常严格的,但是你会发现一个现象,如果一个类继承了另外一个类,把子类的对象赋值给父类的时候,系统不但不提示错误,而且程序还能顺利的编译通过并运行。这其实就是 C++ 内部提供的赋值兼容的过程,但是要注意,如果子类数据成员比父类多,则会出现数据截断。具体表现形式如下图:
示例代码如下:
#include <iostream> using namespace std; class Shape { public: Shape(int x, int y) :_x(x), _y(y){} void draw() { cout << "draw Shap "; cout << "start (" << _x << "," << _y << ")" << endl; } protected: int _x; int _y; }; // 继承 Shape 类 class Circle : public Shape { public: Circle(int x, int y, int r) :Shape(x, y), _r(r){} void draw() { cout << "draw Circle "; cout << "start (" << _x << "," << _y << ") "; cout << "radio r = " << _r << endl; } private: int _r; }; int main(int argc, char* argv[]) { // 实例化一个父类对象 Shape s(3, 5); s.draw(); // 实例化一个子类对象 Circle c(1, 2, 4); c.draw(); cout << "------------------------" << endl; // 子类对象给父类变量赋值,普通赋值兼容,会出现数据截断 s = c; s.draw(); return 0; }