const修飾虛擬函式

weixin_34262482發表於2014-03-24

【1】程式1

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class Base
 5 {
 6 public:
 7     virtual void print() const = 0;
 8 };
 9 
10 class Test : public Base
11 {
12 public:
13     void print();
14 };
15 
16 void Test::print()
17 {
18     cout << "Test::print()" << endl;
19 }
20 
21 void main()
22 {
23     // Base* pChild = new Test(); //compile error!
24     // pChild->print();
25 }

【2】程式2

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class Base
 5 {
 6 public:
 7     virtual void print() const = 0;
 8 };
 9 
10 class Test : public Base
11 {
12 public:
13     void print();
14     void print() const;
15 };
16 
17 void Test::print()
18 {
19     cout << "Test::print()" << endl;
20 }
21 
22 void Test::print() const
23 {
24     cout << "Test::print() const" << endl;
25 }
26 
27 void main()
28 {
29     Base* pChild = new Test();
30     pChild->print();
31 }
32 /*
33 Test::print() const
34 */

【3】程式3

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class Base
 5 {
 6 public:
 7     virtual void print() const = 0;
 8 };
 9 
10 class Test : public Base
11 {
12 public:
13     void print();
14     void print() const;
15 };
16 
17 void Test::print()
18 {
19     cout << "Test::print()" << endl;
20 }
21 
22 void Test::print() const
23 {
24     cout << "Test::print() const" << endl;
25 }
26 
27 void main()
28 {
29     Base* pChild = new Test();
30     pChild->print();
31 
32     const Test  obj;
33     obj.print();
34 
35     Test obj1;
36     obj1.print();
37 
38     Test* pOwn = new Test();
39     pOwn->print();
40 }
41 
42 /*
43 Test::print() const
44 Test::print() const
45 Test::print()
46 Test::print()
47 */

備註:一切皆在程式碼中。

總結:const修飾成員函式,也屬於函式過載的一種範疇。

Good Good Study,  Day  Day  Up.

順序  選擇  迴圈  總結

相關文章