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 }
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 }