C++ 中,类型的匹配检测是非常严格的,但是你会发现一个现象,如果一个类继承了另外一个类,把子类的对象赋值给父类的时候,系统不但不提示错误,而且程序还能顺利的编译通过并运行。这其实就是 C++ 内部提供的赋值兼容的过程,但是要注意,如果子类数据成员比父类多,则会出现数据截断。具体表现形式如下图:

2015-05-24_225703 示例代码如下:

#include

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;

}