今天被問到一個C++的函數重載問題,一下子沒反應過來,這種基礎的問題竟然忘記了,以下記錄一下這些忘記的内容。
函數重載
函數重載的定義是:在相同的作用域中,如果函數具有相同名字而僅僅是形參表不同,此時成為函數重載。注意函數重載不能基于不同的傳回值類型進行重載。
注意函數重載中的“形參表”不同,是指本質不同,不要被一些表象迷惑。main函數不能被重載。
下面三組定義本質是相同的,不是重載:
1)int sum (int &a); 和 int sum (int
&);
2) int sum (int a) 和 int sum
(const int a);
3)typedef int DD;
int sum(int a); 和 int sum (DD a);
其中第二個例子對于非引用傳參,形參是否const是等價的。但是當使用引用傳參時,有無const是不同的。使用指針傳參時,指向const對象的指針和指向非const對象的指針做形參的函數是不同的。
*下面談論一個比較惡心的問題,基于const的重載。
在類中會有這樣一種重載,它是合法的。
Class A {
int function ();
int function () const;
};
可以看到在A類中,function函數是發生重載了,而且是合法的。而且在調用時,隻用A類的const對象才能調用const版本的function函數,而非const對象可以調用任意一種,通常非const對象調用不是const版本的function函數。
原因是:按照函數重載的定義,函數名相同而形參表有本質不同的函數稱為重載。在類中,由于隐含的this形參的存在,const版本的
function函數使得作為形參的this指針的類型變為指向const對象的指針,而非const版本的使得作為形參的this指針就是正常版本的指
針。此處是發生重載的本質。重載函數在最佳比對過程中,對于const對象調用的就選取const版本的成員函數,而普通的對象調用就選取非const版
本的成員函數。
(注:this指針是一個const指針,位址不能改,但能改變其指向的對象或者變量)
原文:http://blog.sina.com.cn/s/blog_64053138010171rt.html
今天碰到的另外一個不是很清楚的問題是main函數之外的事情,這個在書中偶爾浏覽到過,但是發現具體的記憶不是很清楚了,真悲劇,這裡在回顧一下main函數之前和之後所做的工作。
main函數執行之前,主要就是初始化系統相關資源:
1.設定棧指針
2.初始化static靜态和global全局變量,即data段的内容
3.将未初始化部分的賦初值:數值型short,int,long等為0,bool為FALSE,指針為NULL,等等,即.bss段的内容
4.運作全局構造器,估計是C++中構造函數之類的吧
5.将main函數的參數,argc,argv等傳遞給main函數,然後才真正運作main函數
main函數之後就是做類似的釋放資源工作。
位址:http://blog.csdn.net/gykimo/article/details/8569277