再學建構函式
建構函式體賦值
先構造乙個帶有全預設的日期類
class date
private:
int _year;
int _month;
int _day;
};
上述構造函式呼叫之後,物件中已經有了乙個初始值,但是不能將其稱作為類物件成員的初始化,構造函式體中的語句只能將其稱作為賦初值,而不能稱作初始化。因為初始化只能初始化一次,而建構函式體內可以多次賦值。初始化列表
class date
private:
int _year;
int _month;
int _day;
};
初始化列表以:
開始,接著用乙個,
分隔的資料成員列表,每個「成員變數」後面跟乙個放在括號內的初始值或者表示式注意事項:1、每個成員變數在初始化列表中只出現一次(初始化只能初始化一次)
2、類中的成員:「引用成員變數」,「const成員變數」,「類型別成員(該類沒有預設建構函式)」
class skr
private:
int _a;
};class cxk
private:
skr _aobj;
int& _ref;
const int _n;
}
3、盡可能使用初始化列表初始化,因為不管你是否使用初始化列表,對於自定義型別成員變數,一定會先使用初始化列表初始化。
class time
private:
int _hour;
};class date
private:
int _day;
time _t;
};int main()
列印結果如圖
4、成員變數初始化列表的順序按照在類中宣告成員變數的順序,與初始化列表的順序無關
class array
private:
int* _array;
int _size;
};
explicit關鍵字
用explicit修飾建構函式,將會禁止單個引數的建構函式的隱式轉換
static成員
宣告為static的類成員稱為類的靜態成員,用static修飾的成員變數,稱之為靜態成員變數;
用static修飾的成員函式,稱之為靜態成員函式。靜態的成員變數一定要在類外進行初始化
#include using namespace std;
class a
a(const a& t)
static int getacount()
private:
static int _scount;
};
int a::_scount = 0;
void testa()
private:
// 非靜態成員變數,可以在成員宣告時,直接初始化。
int a = 10;
b b = 20;
int* p = (int*)malloc(4);
static int n;
};
友元
友元函式
在過載運算子中,我們沒辦法將operator《過載成員成員函式。因為cout的輸出流物件和隱含的this指標在搶占第乙個引數位置。this指標預設是第乙個引數也就是左運算元了。但是實際中使用cout需要是第乙個形參物件,才能正常使用。所以我們要將operator《過載成全域性函式。但是這樣的話,又會導致類外沒有辦法訪問成員,那麼這裡就需要友元來解決了。operator同理。
友元函式可以直接訪問類的私有成員,它是定義在類外部的普通函式,不屬於任何類,但需要在類的內部宣告,宣告時需要加friend關鍵字。
#include using namespace std;
class date
private:
int _year;
int _month;
int _day;
}; ostream& operator<
int main()
};int sum_solution(int n)
static size_t _sum;
static size_t _i;
}; size_t solution::_sum = 0;
size_t solution::_i = 0;
類與物件3
編寫乙個類定義形式的結構體變數people。該結構體變數包括資料成員有年齡 age 身高 height 體重 weight 函式成員有進食 eating 運動 sporting 睡眠 sleeping 在主函式中通過結構體變數訪問類的所有成員。includeusing namespace std s...
實驗3 類與物件
part2 ifndef graph h define graph h 類graph的宣告 class graph endif graph.h 類graph的實現 include graph.h include using namespace std 帶引數的建構函式的實現 graph graph ...
C 類和物件(3)
初始化列表是成員或類定義的地方。初始化列 式 class date private int year int month int day 需要注意的幾點 每個成員變數在初始化列表中只能出現一次 初始化只能初始化一次 類中包含以下成員時,必須放在初始化列表的位置進行初始化 class a privat...