C++ test practice

 C++ Objectpooling

#include <string>
#include <iostream>
#include <list>

class Resource
{
    int m_value;
public:
    Resource(){m_value=0;}
    void reset(){m_value=0;}
    int getValue(){return m_value;}
    void setValue(int i){m_value=i;}
};

class ObjectPool
{
    std::list<Resource*> m_resources;
    static ObjectPool* instance;
    ObjectPool(){};
public:
    static ObjectPool* getInstance()
    {
        if(instance = 0)
        {
            instance = new ObjectPool;
        }
        return instance;
    }

    Resource* getResource()
    {
        if(m_resources.empty())
        {
            return new Resource;
        }else{
            Resource* reosurce = m_resources.front();
            m_resources.pop_front();
            return reosurce;
        }
    }

    void returnResource(Resource* object)
    {
        object->reset();
        m_resources.push_back(object);
    }
};

ObjectPool* ObjectPool::instance = 0;

int main()
{
    ObjectPool* pool = ObjectPool::getInstance();

    Resource* one;
    Resource* two;

    one = pool->getResource();
    two = pool->getResource();

    one->setValue(213);
    two->setValue(11);

    std::cout<<one->getValue()<<","<<one<<std::endl;
    std::cout<<two->getValue()<<","<<two<<std::endl;

    pool->returnResource(one);
    pool->returnResource(two);
}

Customer data

#include <iostream>
#include <string>

using namespace std;

struct cdata{
public:
    string name;
    int number;
};

const int NAME_LEN = 10;
const int MAX_CUS_NUM = 20;

enum State {ADD = 1, GET, EXIT};

class CustomerInfo
{
private:
    int m_cusNum = 0;
    cdata m_cdata[MAX_CUS_NUM];
public:
    CustomerInfo() {}
    ~CustomerInfo() { delete[] m_cdata; cout<<"Customer info destroyed"<<endl; }

    int GetNumber(string ID)
    {
        for(int i = 0; i < m_cusNum; i++)
        {
            if(m_cdata[i].name == ID)
            {
                return m_cdata[i].number;
            }
        }
        //return null;
    }

    CustomerInfo& Add(string ID, int num)
    {
        m_cdata[m_cusNum].name = ID;
        m_cdata[m_cusNum].number = num;
        m_cusNum++;

        return *this;
    }

    void AddCustomer(string ID, int num)
    {
        m_cdata[m_cusNum].name = ID;
        m_cdata[m_cusNum].number = num;
        m_cusNum++;
    }
};

void ShowMenu()
{
    cout<<"___Menu___"<<endl;
    cout<<"1.Add Customer"<<endl;
    cout<<"2.Get Customer Number"<<endl;
    cout<<"3.Exit"<<endl;
    cout<<endl;
}

void AddCustomer(CustomerInfo * (&cusInfo))
{
    string ID;
    int i;
    cout<<"[ADD CUSTOMER]"<<endl;
    cout<<"ID : ";
    cin>>ID;
    cout<<"Number : ";
    cin>>i;
    cusInfo->AddCustomer(ID,i);
}

void GetNumber(CustomerInfo * (&cusInfo))
{
    string ID;
    cout<<"[GET NUMBER]";
    cout<<"ID : ";
    cin>>ID;
    cout<<"Number is : "<<cusInfo->GetNumber(ID)<<endl;
}

int main(void)
{
    int choice = 0;
    //CustomerInfo customerInfo;
    //CustomerInfo &_customerInfo = customerInfo;
    CustomerInfo * pCustomerInfo = new CustomerInfo();

    while(1)
    {
        ShowMenu();
        cout<<"Select : ";
        cin>>choice;

        switch(choice)
        {
            case ADD:
            AddCustomer(pCustomerInfo);
            //AddCustomer(&_customerInfo);
            break;

            case GET:
            GetNumber(pCustomerInfo);
            //GetNumber(&_customerInfo);
            break;

            case EXIT:
                delete pCustomerInfo;
                return 0;
        }
    }

    system("pause");
    return 0;
}

mallocFree.cs

#include <iostream>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int arr[4] = {4,3,2,1};
    int* pArr;

    //set int type size * 4 memory
    pArr = (int *)malloc(sizeof(int) * 4);

    if(pArr == NULL)
    {
        printf("malloc error");
    }

    for (int i =0; i<4; i++)
    {
        pArr[i] = arr[i];
    }

    for (int i =0; i<4; i++)
    {
        printf("%d \n", pArr[i]);
    }

    free(pArr);

    return 0;
}

Swap pointer.cs

#include <iostream>

using namespace std;

void SwapByRef(int *val1, int *val2)
{
    int temp = *val1;
    *val1 = *val2;
    *val2 = temp;
}

void SwapByRef2(int & val1, int &val2)
{
    int temp = val1;
    val1 = val2;
    val2 = temp;
}

//Get pointer of the reference
void SwapPointerByRef(int *(&val1), int * (&val2))
{
    int * temp = val1;
    val1 = val2;
    val2 = temp;
}

//const strict value change
void CopyPointerValByRef(int * const(&from), int * (&to))
{
    to = from;
}

void CopyValByRef(const int &from, int &to)
{
    to = from;
}

int main(void)
{
    int a = 10;
    int b = 20;

    SwapByRef(&a, &b);

    cout<<"a : "<<a<<" ,b: "<<b<<endl;

    SwapByRef2(a,b);
    cout<<"a : "<<a<<" ,b: "<<b<<endl;

    int num1 = 5;
    int *ptr1 = &num1;
    int num2 = 10;
    int *ptr2 = &num2;

    cout << ptr1 << ","<<ptr2;
    cout<<endl;
    SwapPointerByRef(ptr1, ptr2);
    cout << ptr1 << ","<<ptr2;
    cout<<endl;
    //CopyValByRef(*ptr1, *ptr2);
    CopyPointerValByRef(ptr1, ptr2);
    cout << ptr1 << ","<<ptr2<<endl;    
    cout << *ptr1 << ","<<*ptr2;  
}

Reference Return.cs

#include <iostream>

using namespace std;

//return reference
int & RefRetFunction(int & ref)
{
    ref ++;
    return ref;
}

int literalAdd(const int &val1, const int &val2)
{
    return val1+val2;
}

int main(void)
{
    //num1 & num2 exist
    int num1 = 1;
    int &num2 = RefRetFunction(num1);

    //pointing same adress
    num1 += 2;
    num2 += 4;

    cout<<"num1 : "<<num1<<", num2 : "<<num2<<endl;

    //not pointing reference put only value
    int num3 = 1;
    int num4 = RefRetFunction(num3);

    num3 +=10;
    num4 +=100;
    cout<<"num3 : "<<num3<<", num4 : "<<num4<<endl;

    //temporal memory set
    const int num5 = 40;
    cout<<"literal add : "<<literalAdd(10,20)<<endl;

    return 0;
}






댓글

이 블로그의 인기 게시물

About AActor!!! "UObject" has no member "BeginPlay"

UNREAL Android build information

C++ 생성자 위임 (delegating constructor)