物件和類——類中的函式過載
阿新 • • 發佈:2019-02-18
本文參照於狄泰軟體學院,唐佐林老師的——《C++深度剖析教程》
函式過載特點
- 函式過載的本質是相互獨立的不同函式。
- C++中通過函式名和函式引數確定函式呼叫
- 無法直接通過函式名得到過載函式的入口地址。
- 函式過載必然發生在同一個作用域中。
問題:既然有普通函式的過載,那麼類中的成員函式也支援過載嗎?
實際上,我們已經試過過載類中的成員函數了。如:預設建構函式,拷貝建構函式…
除了建構函式還支援別的成員函式的過載。
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(); 的輸出我們知道,類的靜態成員函式和普通成員函式也可以構成過載關係。