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 referencevoid 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 referenceint & 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;}
댓글
댓글 쓰기