C++

2020. 10. 7. 16:17데일리/오늘

1. obscure expression

 

#1

template<class ItemType>
CountedQueueType<ItemType>::CountedQueueType(int max):QueueType(max)
{
	length = 0;
}
  • class를 처음 선언할 때 빼고는 늘 <>가 따라다닌다.
  • ::를 통해서 클래스에 접근하며, 상속받은 sub class에서는 :를 하나만 써도 된다.
  • 위의 statement는 max를 입력받아, super class의 QueueType에 max를 입력하는 행위를 실행한다는 뜻이다.

#2.

template<class ItemType>
void CountedQueueType<ItemType>::enqueue(ItemType item)
{
	QueueType<ItemType>::enqueue(item);
	length++;
}

super class에 접근하는 방법을 보인다.

 

#3.

QueType::QueType(const QueType& que)
{
    delete[] this->items
    this->items = new int[que.maxQue];
    for (int i = 0;i < que.maxQue;i++)
    {
        this->items[i] = que.items[i];
    }
}

선언과 동시에 복사, 혹은 선언과 동시에, 혹은 함수에 인자로 등은 생성시기 이므로

 

delete할 item이 없다, 따라서 delete를 빼야한다. 깊은복사 얘기.

 

#4. 복사생성자도 "생성자" 이다. 이곳에서 데이터 멤버를 초기화 해줘야 한다.

-

복사생성자에 대해 어렵게 생각할 필요가 없다, <데이터멤버> 일반변수 모두를 그대로 가져오고

front = que.front;

 포인터변수에 대해서는 모두 new로 새로 할당해 주면 된다.

 

그리고 복사생성자가 아닌, 복사 대입 연산자에 대해서는 delete를 반드시 행해줘야 한다. #3 참고

'데일리 > 오늘' 카테고리의 다른 글

인코딩(+=)  (0) 2020.10.20
인코딩(임시)  (0) 2020.10.17
memory는 lvalue, elem, func_pointer, vector  (0) 2020.10.02
static 변수의 선언은  (0) 2020.09.12
소스 코드 정렬 키  (0) 2020.09.11