1. 程式人生 > >物件和類——類中的函式過載

物件和類——類中的函式過載

本文參照於狄泰軟體學院,唐佐林老師的——《C++深度剖析教程》

函式過載特點

  1. 函式過載的本質是相互獨立的不同函式。
  2. C++中通過函式名和函式引數確定函式呼叫
  3. 無法直接通過函式名得到過載函式的入口地址。
  4. 函式過載必然發生在同一個作用域中。

問題:既然有普通函式的過載,那麼類中的成員函式也支援過載嗎?

實際上,我們已經試過過載類中的成員函數了。如:預設建構函式,拷貝建構函式…
除了建構函式還支援別的成員函式的過載。
1. 建構函式的過載
2. 普通成員函式的過載
3. 靜態成員函式的過載

問題:全域性函式,普通成員函式以及靜態成員函式之間是否可以構成過載?

分析這個問題其實很簡單,寫個程式碼測試一下就可以了。反正電腦又不會爆炸!

示例程式碼:類與過載的全面分析

#include <iostream>

using namespace std;

class Test
{
    int i;
public:
    Test()
    {
        cout << "Test::Test()" << endl;
        this->i = 0;
    }

    Test(int i)
    {
                cout << "Test::Test(int i)"
<< endl; this->i = i; } Test(const Test& obj) { cout << "Test(const Test& obj)" << endl; this->i = obj.i; } static void func() { cout << "static void Test::func()" << endl; } void
func(int i) { cout << "void Test::func(int i), i = " << i << endl; } int getI() { return i; } }; void func() { cout << "void func()" << endl; } void func(int i) { cout << "void func(int i), i = " << i << endl; } int main() { func(); func(1); Test t; Test t1(1); Test t2(t1); func(); Test::func(); func(2); t1.func(2); t1.func(); return 0; }

輸出結果:
void func()
void func(int i), i = 1
Test::Test()
Test::Test(int i)
Test(const Test& obj)
void func()
static void Test::func()
void func(int i), i = 2
void Test::func(int i), i = 2
static void Test::func()

分析:
1. 通過func()和func(1)的輸出,我們可以知道全域性函式之間可以過載
2. 通過Test t;和Test t1(1);和Test t2(t1);的輸出,我們知道類中的建構函式之間可以過載的
3. 通過func();和Test::func();的輸出,我們知道類的靜態成員函式和全域性函式之間可以構成過載
4. 通過t1.func(2);和t1.func(); 的輸出我們知道,類的靜態成員函式和普通成員函式也可以構成過載關係。