C++ 17

12주차 스터디

C++ 표준 템플릿 라이브러리 STL(Standard Template Library) - C++ 표준 라이브러리 중 하나 - 많은 제네릭 클래스와 제네릭 함수 포함 1. 컨테이너 - 템플릿 클래스 - 데이터를 담아두는 자료 구조를 표현한 클래스 - 리스트, 큐, 스택, 맵, 셋, 벡터 2. iterator - 컨테이너 원소에 대한 포인터 - 컨테이너의 원소들을 순회하면서 접근하기 위해 만들어진 컨테이너 원소에 대한 포인터 3. 알고리즘 - 템플릿 함수 - 컨테이너 원소에 대한 복사, 검색, 삭제, 정렬 등의 기능을 구현한 템플릿 함수 - 컨테이너의 멤버 함수 아님 헤더 파일 - 컨테이너 클래스를 사용하기 위한 헤더 파일 - 해당 클래스가 선언된 헤더 파일 include #include #include #..

C++ 2022.12.11

11주차 스터디

함수 중복의 약점 - 중복 함수의 코드 중복 일반화와 템플릿 제네릭(generic) - 함수나 클래스를 일반화, 매개 변수 타입을 지정하여 틀에서 찍어내듯이 함수나 클래스 코드를 생산하는 기법 템플릿 함수나 클래스를 일반화하는 도구 template 키워드로 함수나 클래스 선언 변수나 매개 변수의 타입만 다르고, 코드 부분이 동일한 함수를 일반화시키 제네릭 타입 : 일반화를 위한 데이터 타입 템플릿 선언 template template template 구체화(specialization) - 템플릿의 제네릭 타입에 구체적인 타입 지정 - 템플릿 함수로부터 구체화된 함수의 소스코드 생성 template void myswap(T &a, T &b) { T tmp; tmp = a; a = b; b = tmp; } ..

C++ 2022.12.04

10주차 스터디

protected 접근 지정 - private 멤버 선언된 클래스 내에서만 접근 가능 파생 클래스에서도 기본 클래스의 private 멤버 직접 접근 불가 - public 멤버 선언된 클래스나 외부 어떤 클래스, 모든 외부 함수에 접근 허용 파생 클래스에서 기본 클래스의 public 멤버 접근 가능 - protected 멤버 선언된 클래스에서 접근 가능 파생 클래스에서만 접근 허용 - 파생 클래스가 아닌 다른 클래스나 외부 함수에서는 protected 멤버를 접근할 수 없다. 생성자 호출 관계 및 실행 순서 A의 파생인 B의 파생 C 클래스 제일 아래 클래스부터 윗 클래스까지 순서대로 호출되고, 그 반대로 실행 및 리턴 실행은 A부터니까 생성자 A -> 생성자 B -> 생성자 C 순서로 출력되고, 소멸자는..

C++ 2022.11.24

9주차 스터디

함수 중복 간소화 - 디폴트 매개 변수의 장점 - 중복 함수들과 디폴트 매개 변수를 가진 함수를 함께 사용 불가능함. class Circle{ ....... public: Circle() { radius = 1; } Circle(int r) { radius = r; } Circle(int r = 1) { radius = r; } //중복된 함수의 동시 사용 불가 중복 간소화 연습 함수 중복의 모호성 중복이 모호하여 컴파일러가 어떤 함수를 호출하는지 판단하지 못하는 경우 - 형 변환 - 참조 매개 변수 - 디폴트 매개 변수 static 멤버와 non-static 멤버의 특성 - static 변수와 함수에 대한 기억 부류의 한 종류 생명 주기 = 프로그램이 시작될 때 생성돼서, 종료할 때 소멸함 사용 범위 ..

C++ 2022.11.19

8주차 스터디

참조 리턴 C언어의 함수 리턴 - 함수는 반드시 값만 리턴 - 기본 타입 값 : int, char, double 등 - 포인터 값 C++의 함수 리턴 - 함수는 값 외에 참조 리턴 가능 - 참조 리턴 - 변수 등과 같이 현존하는 공간에 대한 참조 리턴 - 변수의 값을 리턴하는 것이 아님. find()는 값이 아닌 공간을 리턴하기 때문에 'a' 가 아닌 다른 문자를 저장할 수 있다. name 배열에 M i k e \0으로 저장돼있었는데 find 함수와 ref가 각각 name[0]와 name[2] 위치를 참조해서 다른 문자를 리턴한다. 복사 생성자 1. 얕은 복사 (swallow copy) - 객체 복사 시, 객체의 멤버를 1:1로 복사 - 객체의 멤버 변수에 동적 메모리가 할당된 경우 -> 사본은 원본 객..

C++ 2022.11.13

껄껄껄 7주차 스터디

이번 주 배운 내용 : 객체 치환 및 객체 리턴, 참조 변수, 참조에 의한 호출, vector 실습 1. 객체 치환 및 객체 리턴 - 동일한 클래스 타입의 객체끼리 치환 가능 - 객체의 모든 데이터가 비트 단위로 복사된다. c1 객체의 반지름이 5에서 30으로 바뀐다. 두 객체는 내용물만 다를 뿐이지 독립된 공간을 유지한다. -객체 리턴 -객체의 복사본 리턴 객체 tmp를 리턴하는 getCircle()을 반지름이 1인 객체 c에 복사하여 c의 반지름을 30으로 치환한다. 2. 참조 변수 참조 변수 선언 - 참조자 & - 이미 존재하는 변수에 대한 다른 이름(별명)을 선언 - 참조 변수는 이름만 생기고, 새로운 공간을 할당하지 않는다. - 초기화로 지정된 기존 변수를 공유한다. 객체에 대한 참조 refc가..

C++ 2022.11.05

C++ 6주차 스터디 과제 1 : Template

오버로딩 : 하나의 함수로 다양한 타입을 처리하는 것. Ex) add()의 매개변수를 int형과 double형으로 사용. 템플릿 : 함수나 클래스를 일반화하기 위한 도구 템플릿 선언 1) template 2) template -> 권장되는 방식 *T : 제네릭 타입. 사용자가 원하는 이름으로 정해줌. 구체화 : 사용자가 원하는대로 정해둔 typename이 넣어주는 값의 자료형에 따라서 함수 자료형이 int, double 등으로 변함. 위 이미지에서처럼 typename SWING으로 정해뒀던 void myswap 함수가 main에서는 void myswap(int &a, int &b)로 구체화 및 참조에 의한 호출이 발생한다. 한 번 템플릿을 선언하고나서 템플릿을 계속 이용할 수 있을 줄 알았는데, 그러진 ..

C++ 2022.06.23