[源碼下載]
作者: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
[源碼下載]