一.參考代碼
#include<iostream>
using namespace std;
//初始化列表
//class B {
//public:
// B(int a,char b)
// :_a(a)
// ,_b(b)
// {
// cout << "B()" << endl;
// }
//private:
// int _a;//4
// char _b;//1
//};
//class A {
//public:
// A(int year,int month,int day,int hour,char b,int c)
// :_year(year)
// ,_month(month)
// ,_day(day)
// ,_b(hour,b)
// ,_c(c)
// ,_d(1)
//
// {
// cout << "A()" << endl;
// }
// /*class D {///內部類
// public:
// D() {
// _h;//可以訪問靜態成員變量
// }
// private:
// int _g;
// };*/
//
// void Display() {
// cout << _year << _month << _day << endl;
// }
//private:
// int _year;//4
// int _month;//4
// int _day;//4
// static int _h;//4在靜態區,不計算到A類大小裏面
// //必須初始化的成員變量
// B _b;//內存對齊之後是8
// int& _c;//4
// const int _d;//4
//
//};
//int A::_h = 1;
//class C
//{
//public:
// explicit C(int j, int w, int z)
// //:_f(f)//構造 函數無法初始化靜態數據
// :_j(j)
// , _w(w)
// ,_z(z)
// {}
// void Display() {
// cout << _j <<_w<<_z<< endl;
// }
//private:
// static int _f;//靜態的數據在,靜態區存儲
// int _j;
// int _k;
// int _w;
// int _z;
//};
//int C::_f = 1;
//class A {
//public:
// A() {
// cout << "A()" << endl;
// ++_scount;
// }
// A(const A& t) {
// cout << "A()拷貝" << endl;
// ++_scount;
// }
// static int GetACount() { return _scount; }
//private:
// static int _scount;
//};
//int A::_scount = 0;
//void TestA()
//{
// cout << A::GetACount() << endl;
// A a1, a2;
// A a3(a1);
// cout << A::GetACount() << endl;
//}
int main() {
//char a= 'a';
//A d(0,0,0,a,0,0);
//d.Display();
//C c(1,2,3);
//c.Display();
//C d = (1,2);
//d.Display();
//cout << sizeof(A) << endl;
//cout << sizeof(C) << endl;//1
//TestA();
system("pause");
return 0;
}
二.歸類整理
1.再談構造函數
(1).構造函數完成的是成員變量的初始化,初始化只有一次,我們之前完成的可以叫做成員變量的賦值,可以多次調用賦值。
(2).構造函數構造時的順序,是根據成員變量定義的順序。
(3).自定義函數最先初始化。
(4).const 修飾 引用 自定義類型(沒有默認構造函數) 必須在初始化列表初始化。
2.友元類
(1).友元關係是單項的,友元關係不能傳遞。
(2).友元類實現了在類外面訪問,某些友元的私有成員。
3.內部類
(1).定義在類內部的類成爲內部類。
(2).計算類大小的時候,內部類不算進去,並且static 修飾的成員變量也不算進去,因爲它在靜態區,初始化需要在類外初始化,並且可以被內部類直接調用。
(3).內部類就是外部類的友元類,可以直接訪問外部類的成員函數,和成員變量。
4.static成員
(1).static修飾的成員變量,屬於全局域,存在靜態區,必須在類外面定義。
(2).static修飾的成員函數,可以直接通過類名加作用域限定符調用。
(3).靜態成員函數沒有this指針,所以不能訪問非靜態成員。
(4).靜態成員和類裏面的普通成員變量一樣。
5.explicit關鍵字
(1).構造函數不僅可以構造與初始化對象,對於單個參數的構造函數,還具有類型轉換的作用。
加了explicit關鍵字後,就防止隱式類型轉化。