在c++中預設產生6個類成員函式,即預設函式,它們分別是:
預設建構函式
預設拷貝建構函式
預設析構函式
預設賦值運算子
預設取址運算子
預設取位址運算子const
很多人以為只有前4個預設函式,事實上有6個。
**驗證如下:
可見,我們在沒有寫函式功能的情況下,進行構造,析構,拷貝等等操作都是可以實現的,這就是6個預設函式的功勞了。
注意,很多人在這裡有乙個誤區。
是不是構造乙個 空類,這個空類就已經有6個預設預設函式了?
這是錯誤的!請看**:
#include
using
namespace
std;
class a
{};int main()
測試空類的大小,得出: 空類a的大小為 1 。
對於空類,編譯器不會生成任何成員函式!只會生成1個位元組的佔位符。
空類也是可以被例項化的,而每個例項在記憶體中都是獨一無二的位址,為了達到這個目的,編譯器往往會給乙個空類隱含的加乙個位元組,這樣空類在例項化後就可以得到了獨一無二的位址,這就是乙個佔位符的意義。
那麼什麼時候才會生成6個預設預設成員函式呢?
編譯器只會在需要的時候生成,也就是說,在第乙個**main()中:
a c1; 構造c1才會生成建構函式;
a c2 = c1; 拷貝構造c2時才會生成拷貝建構函式;
同樣析構c1,c2時,才會構造析構函式,依次類推~
(也會預設構造乙個this指標)
C 類的6個預設函式
在c 中預設產生6個類成員函式,即預設函式,它們分別是 預設建構函式 預設拷貝建構函式 預設析構函式 預設賦值運算子 預設取址運算子 預設取位址運算子const 很多人以為只有前4個預設函式,事實上有6個。驗證如下 include using namespace std class a int ma...
C 中類的6個預設函式
類的6個預設的成員函式包括 建構函式 析構函式 拷貝建構函式 賦值運算子過載函式 取位址操作符過載 const修飾的取位址操作符過載。以下詳細介紹前四個函式。一 建構函式 cgoods 例項化乙個物件 1 分配物件記憶體空間 2 呼叫物件的建構函式 初始化 定義的同時賦值。賦值 定義後,再賦值。建構...
C 類中6個預設的函式(一)
c 的類中有6個預設的函式,它們分別是 建構函式 析構函式 拷貝建構函式 賦值運算子的過載函式 取位址操作符的過載函式 const修飾的取位址操作符的過載函式 這6個預設的函式有兩個特點 共有的 內聯的 今天我們先來看看前三個預設的函式 建構函式 析構函式和拷貝建構函式 我們都知道,c 中乙個物件的...