程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> VC++深入詳解:函數的重載

VC++深入詳解:函數的重載

編輯:vc教程

  我們希望在構造pt這個對象的同時,傳遞x坐標和y坐標的值。可以再定義一個構造函數,如例2-8所示。

  例2-8

  #include <iOStream.h>
  class point
  {
  public:
     int x;
     int y;
     point()
     {
       x=0;
       y=0;
     }
     point(int a, int b)
     {
       x=a;
       y=b;
     }
     void output()
     {
       cout<<x<<endl<<y<<endl;
     }
  };
   
   
  void main()
  {
     point pt(5,5);
     pt.output();
  }

  在這個程序中,有兩個構造函數,它們的函數名是一樣的,只是參數的類型和個數不一樣。這在C語言中是不允許的,而在C++中上述定義是合法的,這就是C++中函數的重載(overload)。當執行main函數中的point pt(5,5)這條語句時,C++編譯器將根據參數的類型和參數的個數來確定執行哪一個構造函數,在這裡即執行point(int a, int b)這個函數。

  重載構成的條件:函數的參數類型、參數個數不同,才能構成函數的重載。分析以下兩種情況,是否構成函數的重載。

  第一種情況:

  (1)void output();

  (2)int output();

  第二種情況:

  (1)void output(int a,int b=5);

  (2)void output(int a);

  對於第一種情況,當我們在程序中調用output()函數時,讀者認為應該調用的是哪一個函數呢?要注意:只有函數的返回類型不同是不能構成函數的重載的。

  對於第二種情況,當我們在程序中調用output(5)時,應該調用的是哪一個函數呢?調用(1)的函數可以嗎?當然是可以的,因為(1)的函數第二個參數有一個默認值,因此可以認為調用的是第一個函數;當然也可以是調用(2)的函數。由於調用有歧義,因此這種情況也不能構成函數的重載。在函數重載時,要注意函數帶有默認參數的這種情況。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved