Ray's playground

 

Item 37: Never redefine a function's inherited default parameter value(Effective C++)

 

Never redefine an inherited default parameter value, because default parameter values are statically bound, while virtual functions — the only functions you should be overriding — are dynamically bound.

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 class Shape
 6 {
 7 public:
 8     virtual void draw(const string s = "Red"const
 9     {
10         cout << s << " in shape" << endl;
11     }
12 };
13 
14 class Circle : public Shape
15 {
16 public:
17     virtual void draw(const string s = "Blue"const
18     {
19         cout << s << " in circle" << endl;
20     }
21 };
22 
23 int main()
24 {
25     Shape* s = new Circle();
26     s->draw();
27     cin.get();
28     return 0;
29 }

posted on 2011-04-03 11:09  Ray Z  阅读(303)  评论(0编辑  收藏  举报

导航