第29课 类中的函数重载

函数重载回顾:

类中的重载:

万变不离其宗:

类中的普通成员函数和静态成员函数也够成重载。

示例程序:

 1 #include <stdio.h>
 2 
 3 class Test
 4 {
 5     int i;
 6 public:
 7     Test()
 8     {
 9         printf("Test::Test()\n");
10         this->i = 0;
11     }
12     
13     Test(int i)
14     {
15         printf("Test::Test(int i)\n");
16         this->i = i;
17     }
18     
19     Test(const Test& obj)
20     {
21         printf("Test(const Test& obj)\n");
22         this->i = obj.i;
23     }
24     
25     static void func()
26     {
27         printf("void Test::func()\n");
28     }
29     
30     void func(int i)
31     {
32         printf("void Test::func(int i), i = %d\n", i);
33     }
34     
35     int getI()
36     {
37         return i;
38     }
39 };
40 
41 void func()
42 {
43     printf("void func()\n");
44 }
45 
46 void func(int i)
47 {
48     printf("void func(int i), i = %d\n", i);
49 }
50 
51 int main()
52 {
53     func();
54     func(1);
55     
56     Test t;        // Test::Test()
57     Test t1(1);    // Test::Test(int i)
58     Test t2(t1);   // Test(const Test& obj)
59     
60     func();        // void func()
61     Test::func();  // void Test::func()
62     
63     func(2);       // void func(int i), i = 2;
64     t1.func(2);    // void Test::func(int i), i = 2
65     t1.func();     // void Test::func()
66     
67     return 0;
68 }

运行结果如下:

 深度的意义:

重载的意义分析:

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 char* strcpy(char* buf, const char* str, unsigned int n)
 5 {
 6     return strncpy(buf, str, n);
 7 }
 8 
 9 int main()
10 {
11     const char* s = "D.T.Software";
12     char buf[8] = {0};
13     
14     //strcpy(buf, s);
15     strcpy(buf, s, sizeof(buf)-1);
16     
17     printf("%s\n", buf);
18     
19     return 0;
20 }

strncpy实现的功能和strcpy差不多,但是又多了一个名字,导致容易记忆混乱,因此,我们采用strcpy重载的方式将strncpy封装起来。

运行结果如下:

意义在于:我们通过重载扩展了strcpy这个函数,使得它变成了三个参数。而我们不用再记strncpy这个函数名字。

函数重载可以扩展库中已有的函数。

思考:

我们可以通过重载扩展加法的功能。

小结:

 

猜你喜欢

转载自www.cnblogs.com/wanmeishenghuo/p/9571319.html