程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 不可或缺 Windows Native (17),native17

不可或缺 Windows Native (17),native17

編輯:C++入門知識

不可或缺 Windows Native (17),native17


[源碼下載]


不可或缺 Windows Native (17) - C++: 類與對象



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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved