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