[源碼下載]
作者:webabcd
介紹
不可或缺 Windows Native 之 C++
示例
1、CppEmployee 類
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、演示對象的動態創建和釋放, 對象的賦值和復制, 靜態屬性和靜態函數, 類模板
CppClass3.h
#pragma once #include <string> using namespace std; namespace NativeDll { class CppClass3 { public: string Demo(); }; }
CppClass3.cpp
/* * 對象的動態創建和釋放, 對象的賦值和復制, 靜態屬性和靜態函數, 類模板 */ #include "pch.h" #include "CppClass3.h" #include "CppEmployee.h" using namespace NativeDll; void cppclass3_demo1(); void cppclass3_demo2(); void cppclass3_demo3(); void cppclass3_demo4(); string CppClass3::Demo() { // 對象的動態創建和釋放 cppclass3_demo1(); // 對象的賦值和復制 cppclass3_demo2(); // 靜態屬性和靜態函數 cppclass3_demo3(); // 類模板 cppclass3_demo4(); return "看代碼及注釋吧"; } // 對象的動態創建和釋放 void cppclass3_demo1() { // 動態創建對象:new 一個對象,返回的是指向這個對象的指針(如果失敗則返回值為 0, 對應的宏 #define NULL 0) CppEmployee *employee1 = new CppEmployee; CppEmployee *employee2 = new CppEmployee(1, "webabcd"); // 通過 delete pointer 來是釋放內存 delete employee1; delete employee2; } // 對象的賦值和復制 void cppclass3_demo2() { CppEmployee employee1; CppEmployee employee2(1, "webabcd"); // 對象的賦值:同類型的對象之間可以互相賦值。對象間的賦值就是對象屬性的賦值;而他們調用的函數仍然是同一代碼,不用賦值 employee1 = employee2; // 對象的復制:從無到有地復制一個對象 CppEmployee employee3(employee1); CppEmployee employee4 = employee1; /* * 對象的賦值是對一個已經存在的對象賦值;對象的復制則是從無到有地創建一個新對象 */ } // 用於演示靜態屬性和靜態函數 namespace NativeDll { class CppEmployeeStatic { public: static int Version; // 靜態屬性 string Name; string Show() { return this->Name; } static int GetVersion() // 靜態函數 { // 靜態函數中沒有 this 指針 return Version; } string ToString() { return "abc"; } }; } // 初始化靜態屬性(必須要初始化,不然編譯出錯) int CppEmployeeStatic::Version = 10; // 靜態屬性和靜態函數的使用 void cppclass3_demo3() { // 靜態數據成員在程序啟動時被分配空間(編譯時會生成其分配方案),程序結束時釋放空間 CppEmployeeStatic employee; employee.Version = 100; // 支持用 對象. 的方式訪問靜態屬性 int version = CppEmployeeStatic::Version; // 支持用 類:: 的方式訪問靜態屬性 version = CppEmployeeStatic::GetVersion(); // 支持用 類:: 的方式訪問靜態函數 version = employee.GetVersion(); // 支持用 對象. 的方式訪問靜態函數 } // 用於演示類模板(類模板類似函數模板,函數模板參見:CppFunction2.cpp) namespace NativeDll { // template <class T1, class T2> // 聲明一個模板,其有一個名為 T 的不定類型(虛擬類型) template <class T> // 使用了類模板的類就是模板類 class CppClass3Compare { private: T x, y; public: CppClass3Compare(T a, T b) { x = a; y = b; } T Max() { return (x > y) ? x : y; } T Min(); }; } // 注意:要在外面定義模板類的成員函數的話,要像下面這麼寫 template <class T> T CppClass3Compare<T>::Min() { return (x < y) ? x : y; } // 模板類的使用 void cppclass3_demo4() { CppClass3Compare<int> cmp1(2, 14); int a = cmp1.Min(); // 2 int b = cmp1.Max(); // 14 CppClass3Compare<float> cmp2(6.26f, 3.14f); float f1 = cmp2.Min(); // 3.14 float f2 = cmp2.Max(); // 6.26 }
OK
[源碼下載]