Listing 2: Implementation of Company using referencecount template

#include <stdio.h>
#include <string.h>
#include <memory.h>
#include "refcount.h"

///////////////////////////////////////////////////////////////////
// Data structure for storing variables for class Company
struct SCompany
{
    SCompany()
    {
        memset(m_szCompanyName, 0, sizeof(m_szCompanyName));
        memset(m_szAddress, 0, sizeof(m_szAddress));
    }

    SCompany(const SCompany& struCompany)
    {
        strcpy(m_szCompanyName, struCompany.m_szCompanyName);
        strcpy(m_szAddress, struCompany.m_szAddress);
    }

    char m_szCompanyName[81];
    char m_szAddress[128];
};

class Company : public CHReferenceCount<SCompany>
{
public:
    // Data accessing functions - using const GetData()
    const char* GetCompanyName() const
        { return GetData()->m_szCompanyName; }
    const char* GetAddress() const
        { return GetData()->m_szAddress; }
    // Data manipulation functions - using non-const GetData()
    void SetCompanyName(const char* szCompanyName)
        { strcpy(GetData()->m_szCompanyName, szCompanyName);}
    void SetAddress(const char* szAddress)
        { strcpy(GetData()->m_szAddress, szAddress);}
};

int main()
{
    Company objCompany;
    objCompany.SetCompanyName("ABC Company");
    objCompany.SetAddress("100 Main Street, Nowhereville USA");
    printf("Company name: %s\n",objCompany.GetCompanyName());
    printf("Address     : %s\n",objCompany.GetAddress());
    return 0;
}
//End of File