不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板

[源码下载]

作者: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
[源码下载]

时间: 2024-10-05 04:55:11

不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板的相关文章

不可或缺 Windows Native 系列文章索引

[源码下载] 作者:webabcd 1.不可或缺 Windows Native (1) - C 语言: hello c 介绍不可或缺 Windows Native 之 C 语言 在 Windows Store Apps 中调用 C/C++ hello c 2.不可或缺 Windows Native (2) - C 语言: 常量,变量,基本数据类型 介绍不可或缺 Windows Native 之 C 语言 常量 变量 基本数据类型 3.不可或缺 Windows Native (3) - C 语言:

不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用

[源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, const 对象的引用 作者:webabcd 介绍不可或缺 Windows Native 之 C++ this 指针 对象数组 对象和指针 const 对象 const 指针和指向 const 对象的指针 const 对象的引用 示例1.CppEmployee 类CppEmployee.h #pragma

不可或缺 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; pr

不可或缺 Windows Native (23) - C++: 虚函数

[源码下载] 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 虚函数 示例1.基类CppHuman.h #pragma once #include <string> using namespace std; namespace NativeDll { class CppHuman { protected: string Name; public: // 我是虚函数 virtual string Show(); // 我是纯虚函数(后面的“=0”只起形式上的作用,用

不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换

[源码下载] 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 运算符重载 自定义类型转换 示例CppOperator.h #pragma once #include <string> using namespace std; namespace NativeDll { class CppOperator { public: string Demo(); }; } CppOperator.cpp /* * 运算符重载, 自定义类型转换 */ #include &qu

不可或缺 Windows Native (12) - C++: 引用类型

[源码下载] 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 引用类型 示例CppReference.h #pragma once #include <string> using namespace std; namespace NativeDll { class CppReference { public: string Demo(); }; } CppReference.cpp /* * 引用类型 * * 引用也可以称之为“别名” * * 注: * 1.声明引

不可或缺 Windows Native (20) - C++: 友元函数, 友元类

[源码下载] 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 友元函数 友元类 示例演示友元函数, 友元类CppClass4.h #pragma once #include <string> using namespace std; namespace NativeDll { class CppClass4 { public: string Demo(); }; } CppClass4.cpp /* * 友元(friend)函数, 友元类 * * 友元函数: C+

不可或缺 Windows Native (6) - C 语言: 函数

[源码下载] 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 函数 示例cFunction.h #ifndef _MYHEAD_FUNCTION_ #define _MYHEAD_FUNCTION_ #ifdef __cplusplus extern "C" #endif // 函数声明 // 像这种在 .h 中声明的函数,如果想被外部文件调用的话,则外部文件不用再声明即可调用 char *demo_cFunction(); long recursion

不可或缺 Windows Native (14) - C++: 文件

[源码下载] 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 文件 示例CppIO2.h #pragma once #include <string> using namespace std; namespace NativeDll { class CppIO2 { public: string Demo(string rootPath); }; } CppIO2.cpp /* * 文件 */ #include "pch.h" #include