2019/10/31

5

C++ 클래스 템플릿과 프렌드 함수

클래스 템플릿도 프렌드를 가질 수 있습니다. 템플릿의 프렌드를 3가지로 분류할 수 있습니다. 템플릿이 아닌 프렌드 바운드 템플릿 프렌드(클래스가 구체화될 때 클래스의 데이터형에 의해 프렌드의 데이터형이 결정됩니다.) 언바운드 템플릿 프렌드(프렌드의 모든 특수화가 그 클래스의 각 특수화에 대해 프렌드들입니다.) 템플릿이 아닌 프렌드 template class ClassTemplate { friend void Show(); }; void Show() { } 이 선언은 Show 함수를 그 템플릿의 가능한 모든 구체화들에 대해 프렌드로 만듭니다. 즉 어떤 타입으로 구체화가 되든 항상 프렌드라는 것입니다.(ClassTemplate, ClassTemplate) 그런데 Show 함수가 매개변수로 해당 객체를 가지지 ..

프로그래밍/C++ 2019.10.31 Plorence

C++ 클래스 템플릿 특수화(specialization),구체화(instantiation)

암시적 구체화(implicit instantiation) 이때까지 선언한 게 암시적 구체화를 사용합니다. 템플릿 클래스를 만들게 되면(선언하게 되면) 필요에 따라 컴파일러는 클래스 템플릿(설계도)을 사용하여 하나의 특수화된 클래스 정의를 생성합니다. 컴파일러는 객체가 요구될 때까지 그 클래스의 암시적 구체화를 생성하지 않습니다. 즉 포인터 선언만 하고 객체를 생성하고 그 포인터가 가리킬 때 암시적 구체화가 됩니다. Array * arr2; //선언만 해서 암시적 구체화가 안됨 arr2 = new Array; //이제 암시적 구체화가 됨 만약 포인터가 아닌 객체라면, 선언만으로도 암시적 구체화가 됩니다. 명시적 구체화(explicit instantiation) 암시적 구체화는 컴파일러가 클래스 템플릿을 참..

프로그래밍/C++ 2019.10.31 Plorence

C++ 클래스 템플릿(Class Template)

클래스 템플릿을 학습하기 전, 반드시 함수 템플릿을 공부하시는 것을 권합니다. 저번에는 함수 템플릿이었지만, 이번에는 클래스 템플릿입니다. 둘 다 똑같은 템플릿이고 비슷하기도 합니다. 다만 이번에는 함수가 아닌 클래스입니다. 클래스 템플릿 정의 template //class 대신 typename도 가능 class Array { }; 함수 템플릿처럼 클래스 정의 위에 template을 써주면 됩니다. 이때 키워드 class는 데이터형을 값으로 받아들이는 어떤 변수의 데이터형 이름의 역할을 합니다 Type은 그 변수의 이름을 나타냅니다. 키워드 class는 템플릿 매개변수의 타입이 반드시 클래스여야 한다는 것은 아닙니다. 단지 실제 데이터형으로 대체되는 포괄 데이터형의 지정자 역할을 한다는 뜻입니다. (ty..

프로그래밍/C++ 2019.10.31 Plorence

시놀로지 Drive 공유 링크 변경 방법

외부 아이피, DDNS, 사용자 지정 세 가지 방법 중에 하나로 됩니다. File Station에서는 자동으로 포트까지 써주지만, Drive는 따로 설정해줘야 합니다. 그러기 위해서는 사용자 지정됨 으로 바꾸고 밑에 도메인과 포트를 작성하시면 됩니다.

Synology 2019.10.31 Plorence

C++ 다중 상속(Multiple inheritance : MI)

다중 상속은 파생 클래스가 여러 기초 클래스를 상속받았을 때 다중 상속이라고 부릅니다. 다중 상속을 사용하게 된다면 다음과 같은 문제가 생깁니다. 두 개 이상의 기초 클래스로부터 이름은 같지만 서로 다른 메서드들을 상속하는 문제 둘 이상의 서로 관련된 인접 기초 클래스들로부터 어떤 클래스의 다중 인스턴스를 상속하는 문제 이러한 다중 상속의 문제 때문에 추가된 기능이 있습니다. 다중 상속을 사용하기 전에 고려해야할 사항, 조상 클래스는 어떻게 할 것인가? 다중 상속을 사용할 때 기초 클래스의 N개만큼 포함할 것인지 하나의 독립적인 것으로 만들 것인지 설계해야 합니다. 만약 조상 클래스를 독립적인 형태로 만들려면 새로운 기능을 사용해야 합니다. class Person { }; class Student : P..

프로그래밍/C++ 2019.10.31 Plorence