C++中函数重载和重写的区别是什么?

  函数重载:

    利用命名矫正(name mangling)技术,在编译时把函数名加上参数的首字母来区分同名函数。

    需要满足3个条件:

      1.同一个作用域下

      2.函数名相同

      3.函数参数类型不同,参数个数不同,参数顺序不同

 

    示例:    

 1 //函数重载需要函数都在同一个作用域下
 2 void func()
 3 {
 4     cout << "func 的调用!" << endl;
 5 }
 6 void func(int a)
 7 {
 8     cout << "func (int a) 的调用!" << endl;
 9 }
10 void func(double a)
11 {
12     cout << "func (double a)的调用!" << endl;
13 }
14 void func(int a ,double b)
15 {
16     cout << "func (int a ,double b) 的调用!" << endl;
17 }
18 void func(double a ,int b)
19 {
20     cout << "func (double a ,int b)的调用!" << endl;
21 }
22 
23 //函数返回值不可以作为函数重载条件
24 //int func(double a, int b)
25 //{
26 //    cout << "func (double a ,int b)的调用!" << endl;
27 //}
28 
29 
30 int main() {
31 
32     func();
33     func(10);
34     func(3.14);
35     func(10,3.14);
36     func(3.14 , 10);
37     
38     system("pause");
39 
40     return 0;
41 }

 

 

 

  函数重写:

    在基类的函数前加virtual关键字,在派生类重写改函数,运行时根据对象的实际类型来调用相应的函数。

    重写需要满足:

      1.函数返回值相同

      2.函数名相同

      3.函数参数相同

      4.但函数体不同

  示例:  

 1 class Animal
 2 {
 3 public:
 4     virtual void speak()
 5     {
 6         cout << "动物在说话" << endl;
 7     }
 8 };
 9 
10 class Cat :public Animal
11 {
12 public:
13     void speak()  //重写,返回值相同,函数名相同,函数参数相同
14     {
15         cout << "小猫在说话" << endl;
16     }
17 };
18 
19 
20 void test01()
21 {
22     Cat cat;
23     DoSpeak(cat);
24 }
25 
26 
27 int main() {
28 
29     test01();
30 
31     system("pause");
32 
33     return 0;
34 }

 

posted @ 2023-04-28 19:05  潘阳399  阅读(60)  评论(0编辑  收藏  举报