对象的静态类型:就是它在程序中被声明时的类型。

对象的动态类型:,则是指“目前所指对象的类型”,动态类型可以表现出一个对象将会有什么行为。

 

静态绑定:

又名前期绑定,如缺省参数值绑定。

动态绑定:

又名后期绑定,如virtual是动态绑定而来,意思是调用一个virtual函数时,究竟调用哪一份函数实现代码,取决与发出调用是那个对象的动态类型。

effective c++ 条款37 绝不重新定义继承而来的缺省参数值(静态绑定和动态绑定)


class Shape {
public:
	enum ShapeColor{ Red,Green,Blue};
	virtual void draw(ShapeColor color = Red)const = 0;
};

class Rectangle :public Shape {
public:
	 void draw(ShapeColor color = Green) const {
		cout << "Rec color = " << color << endl;
	}
};

class Circle :public Shape {
public:
	void draw(ShapeColor color)const {
		cout << "Cir color = " << color << endl;
	}
};

注意这个函数:

class Rectangle :public Shape {
public:
	 void draw(ShapeColor color = Green) const {
		cout << "Rec color = " << color << endl;
	}
};

静态绑定下,Rectangle的draw函数并不从Base继承缺省参数值-->Green。

而动态绑定下无论它的缺省参数是什么,draw会从Base继承缺省参数值-->Red

Shape* ps=new Circle;
	ps->draw();//动态绑定

	Shape* pr = new Rectangle;//动态绑定
	pr->draw();

	Rectangle s_rec;//静态绑定
	s_rec.draw();

effective c++ 条款37 绝不重新定义继承而来的缺省参数值(静态绑定和动态绑定)

 

 

 

相关文章: