[源碼下載]
作者:webabcd
介紹
不可或缺 Windows Native 之 C++
示例
1、類的設計
CppEmployee.h
#pragma once #include <string> using namespace std; namespace NativeDll { class CppEmployee { int Number; // 默認為 private private: // 以下都是 private 的 string Name; bool IsMale; protected: // 以下都是 protected 的 string ToString(); public: // 以下都是 public 的 float Salary; int Age; string Show(); // 構造函數(constructor),不定義的話,編譯時會自動生成一個默認的不做任何事情的無參數構造函數(如果指定為 private 的話就可以禁止直接實例化,一般做單例模式的話會這麼做) // 另外:如果聲明了帶參數的構造函數,則不會自動生成默認的無參數構造函數 CppEmployee(); CppEmployee(int number, string name = "webabcd"); // 可以為構造函數中的參數指定默認值(參考:CppFunction1.cpp) CppEmployee(int number, string name, bool isMale); // 析構函數(destructor),對象被銷毀時會調用,例如釋放動態分配的內存等。不需要時也可以不定義,編譯時會自動生成一個默認的不做任何事情的析構函數,析構函數的函數名與類名相同,前面有“~” ~CppEmployee(); private: // 注:在體內定義的成員函數,系統會自動將其作為 inline 函數處理(關於 inline 函數,參見:CppFunction2.cpp) void Temp() { int a = 100; } /* 下面這個與上面那個一樣 inline void Temp() { int a = 100; } */ }; }
CppEmployee.cpp
/* * CppEmployee 類 */ #include "pch.h" #include "CppEmployee.h" #include "cppHelper.h" using namespace NativeDll; // “::”是作用域限定符(field qualifier) string CppEmployee::Show() { return int2string(Number) + " " + Name; } string CppEmployee::ToString() { return int2string(Number) + " " + Name; } // 無參數的構造函數 CppEmployee::CppEmployee() { Number = 888; Name = "webabcd"; } // 有參數的構造函數,可以在聲明中為參數指定默認值 CppEmployee::CppEmployee(int number, string name) { Number = number; Name = name; } // 可以通過下面這種簡單的方式,將構造函數中的參數值賦值給對象的變量 CppEmployee::CppEmployee(int number, string name, bool isMale) :Number(number), Name(name), IsMale(isMale) { } CppEmployee::~CppEmployee() { }
2、類的使用
CppClass1.h
#pragma once #include <string> using namespace std; namespace NativeDll { class CppClass1 { public: string Demo(); }; }
CppClass1.cpp
/* * 類與對象 */ #include "pch.h" #include "CppClass1.h" #include "CppEmployee.h" using namespace NativeDll; // “::”是作用域限定符(field qualifier) string CppClass1::Demo() { // 定義對象的方法 1:類聲明的同時定義對象(此時也可以無類名) // 定義對象的方法 2:一般用如下的方法定義對象 // class CppEmployee employee; // class 可以省去 CppEmployee employee; // 實例化,同時分配內存空間(僅數據部分分配空間,函數部分不分配空間) // 可以訪問 public 的屬性或函數 employee.Salary = 100.0f; employee.Show(); // 對象的引用 CppEmployee &employee2 = employee; employee2.Salary = 1000.0f; // 對象的指針 CppEmployee *employee3 = &employee; employee3->Salary = 10000.0f; // 也可以這麼實例化 CppEmployee employee5(1, "webabcd"); // 實例化 1 次 CppEmployee employee6 = { 1, "webabcd" }; // 實例化 1 次 CppEmployee employee7 = CppEmployee(1, "webabcd"); // 實例化 2 次。CppEmployee employee7 會實例化一次,CppEmployee(1, "webabcd") 會實例化一次 // 也可以這麼實例化 CppEmployee *employee8 = new CppEmployee(1, "webabcd"); // 實例化,並返回對象的地址 employee8->Show(); delete employee8; // 注: // 1、上面在 Demo 函數中實例化了很多內部對象,他們會按順序一個一個地壓入棧中,棧是 FILO 的,所以當 Demo 函數執行完畢,要銷毀其內部對象時,是按照 FILO 的順序調用析構函數的 // 2、如果同一個類實例化了 n 個對象,則有 n 組同樣大小的空間以存放 n 個對象中的數據成員。但是,不同對象都調用同一個函數代碼段。 return "看代碼及注釋吧"; }
OK
[源碼下載]