시작은 미미하나 끝은 쥬쥬하리라.

Study 56

[열혈 C++ 프로그래밍] (11) 연산자 오버로딩 2

연산자 오버로딩 2 대입 연산자의 오버로딩 배열의 인덱스 연산자 오버로딩 연산자 오버로딩1 연산자 오버로딩2 연산자 오버로딩3 대입 연산자의 오버로딩 대입 연산자 오버로딩 객체 간의 대입 연산은 대입 연산자의 호출로 이어짐 -> 직접 대입 연산자를 정의해주지 않으면 디폴트 대입 연산자 호출 -> 디폴트 대입 연산자는 멤버 대 멤버의 복사를 수행 a1 = a2; -> 일반적으로 객체 간 대입을 불가하지만 a1.operator=(a2)로 해석, 디폴트 연산자 호출 Point pos1(5,7); Point pos2 = pos1; -> 객체 간 복사(복사 생성자 호출) Point pos1(5,7); Point pos2(9,10); -> 대입 연산자 호출 문제점 : 동적 할당하는 경우, 같은 메모리 공간을 참조 ..

[열혈 C++ 프로그래밍] (10) 연산자 오버로딩 1

연산자 오버로딩 1 연산자 오버로딩 단항 연산자의 오버로딩 교환법칙 문제 해결 cout, cin, endl 연산자 오버로딩 하나의 연산자를 여러 의미로 사용할 수 있게 해주는 것 -> 객체 간 불가능한 연산을 사용자가 정의를 한 것을 토대로 객체 간 연산을 가능하게 만듬 p1.operator+(p2); -> p1 객체를 대상으로 p2를 인자로 함수를 호출 p1 + p2 => operator+(p1, p2); 주의점: 1. 연산자의 우선순위와 결합성을 불변 2. 매개변수의 디폴트값 설정 불가 3. 연산자의 순수 기능 변경 불가 -> ex) operator+() { num1*num2 } : 객체가 아닌 변수간 단순 덧셈 - Position 생성자와 operator-() 함수를 정의 - operator-() ..

[열혈 C++ 프로그래밍] (9) 가상의 원리와 다중상속

가상의 원리와 다중상속 멤버함수와 가상함수 다중상속 멤버함수와 가상함수 멤버 함수 물리적으로 메모리의 한 공간에 별도로 위치하여 함수가 정의된 클래스의 모든 객체가 메모리를 공유하는 형태 -> 논리적으로는 객체 안에 멤버 함수 존재 멤버 객체 객체가 생성되면 멤버 객체는 객체 메모리 공간 멤버 객체 객체가 생성되면 멤버 객체는 객체 메모리 공간 내부에 생성 가상함수 동작원리 1. 가상함수가 멤버로 포함 2. 가상함수 V-Table이 생성 3. 함수를 호출하는 경우 V-Table을 참조 -> 가상함수 테이블을 클래스별로 생성 : A클래스 테이블에는 B클래스 가상함수 정보가 없음 -> 가상함수 오버라이딩의 경우 유도 클래스의 V-Table에서 기초 클래스의 가상함수가 가려짐 -> 기초 클래스의 가상 함수가 ..

[열혈 C++ 프로그래밍] (8) 상속과 다형성

상속과 다형성 객체 포인터와 참조 가상함수 가상 소멸자와 참조자의 참조 가능성 객체 포인터와 참조 객체 포인터 기초 클래스의 포인터로 유도 클래스의 객체를 호출 가능 : 유도 클래스 내부의 기초 클래스 멤버만 호출 가능 -> 유도 클래스에서 상위 클래스인 기초 클래스의 객체를 참조하는 것은 불가능 : 대부분의 상황에서 X - Person Student 클래스 내부의 Person 멤버를 가리키 고 있으므로 KIm 객체로 Sleep함수를 가리키면 Sleep 출력 - Person* Park = new PartTimeStudent; -> PartTimeStudent 클래스를 대상으로 새로운 Person형 포인터 객체 생성 : Park -> PartTimeStudent 클래스 내부의 Person 멤버 를 가리키고..

[열혈 C++ 프로그래밍] (7) 상속의 이해

상속의 이해 상속 서론 상속 문법 protected선언, 상속 형태 상속 조건 상속 서론 B클래스가 A클래스를 상속하게 되면 B클래스가 객체를 생성할 때, 객체 내부에 A클래스 멤버도 존재 상속의 필요 이유 : 프로그램에 기능 추가 -> 객체의 추가 작성, 변수의 추가 작성 등 보수 작업 필요 -> 연관된 일련의 클래스들에게 공통 규약을 적용시키기 위함 -> 프로그램의 확장성 저하 = 상속을 통해 문제 해결 상속의 대상 : 상위 클래스, 기초 클래스, 슈퍼 클래스, 부모 클래스 상속 클래스 : 하위 클래스, 유도 클래스, 서브 클래스, 자식 클래스 -> 유도 클래스의 생성자는 기초 클래스의 멤버를 초기화 해야하는 의무를 지님 -> 기초 클래스의 생성자를 명시적으로 호출하여 초기화를 진행(직접적인 초기화는..

[Window System Programming] Chapter 18. 파일 I/O와 디렉토리 컨트롤

4-18 파일 I/O와 디렉토리 컨트롤 파일 I/O 디렉토리 컨트롤 파일 I/O ANSI 미국의 산업 표준을 제정하는 민간단체, 국제표준화기구(ISO)에 가입되어 있는 단체 -> 일반적으로 ANSI는 MicoroSoft 디스크 운영체제인 MS DOS의 기본 인코딩인 OEM-US 혹은 Window-1252를 의미 -> ANSI에서 정의한 파일 입출력 관련 표준함수 = 파일 I/O 함수 파일 I/O 함수 ANSI에서 정의한 파일 입출력 관련 표준, 국제 표준이기 때문에 모든 OS가 해당 표준을 따르며 운영체제에 관계없이 작동하는 함수 -> 하드웨어에 OS를 설치하고 프로그램을 동작할 때, 파일을 생성하면 하드디스크에 저장 -> 이때 파일이 저장되는 방법은 파일 시스템에 의존적, 파일 시스템은 OS의 일부(O..

[열혈 C++ 프로그래밍] (6) friend, static, const

friend, static, const const 클래스와 함수 friend 선언 static const 객체의 const 선언 : 객체 안에 존재하는 데이터의 변경을 허용하지 않겠다는 의미 -> const로 선언된 객체를 대상으로 const 선언되지 않은 멤버 함수를 호출하면 컴파일 에러 발생 const 함수의 오버로딩 : const 선언의 유무도 오버로딩의 조건으로 사용 가능 simple(); simple() const; -> 두 함수는 오버로딩 관계에 있음 -> const 객체를 인자로 함수를 호출하면 simple() const가, 일반 객체를 대상으로 호출하면 simple() 클래스와 함수 friend 선언 friend 선언이 된 대상은 클래스의 private 멤버에 직접 접근이 가능 friend..

[열혈 C++ 프로그래밍] (5) 복사 생성자

복사 생성자 복사 생성자 깊은 복사와 얕은 복사 복사 생성자의 호출시점 복사 생성자 객체 간의 대입 연산이 이루어지는 경우 대입 연산의 결과를 정의하는 것 -> C++은 객체 간 대입 연산의 결과를 프로그래머에게 정의 촉구 -> 복사 생성자를 정의하지 않으면 디폴트 복사 생성자가 멤버 대 멤버 복사의 형태로 정의 simple sim2(sim1) -> simple 클래스에서 sim1 객체를 인자로 받아 생성되는 sim2 객체 simple(const simple &ref) -> 의 형태로 선언, 그렇지 않으면 디폴트 복사 생성자 자동 생성 -> simple sim2=sim1; 의 형태로 대입이 일어났을 때, sim1의 변경이 sim2에 영향을 미치는 것을 방지 explicit 복사 생성자의 묵시적 호출을 제..

[열혈 C++ 프로그래밍] (4) 클래스의 완성

클래스의 완성 정보은닉 캡슐화 생성자와 소멸자 클래스와 배열, this 포인터 정보은닉 정보 은닉 다른 클래스에서의 접근을 제한하는 것 (= 외부에서 멤버 변수에 접근하는 것을 방지) = 멤버 변수를 private 선언 멤버 함수를 통한 안정적인 접근 경로를 설정 액세스 함수 정보 은닉으로 인하여 추가되는 함수 const 함수 멤버 함수의 const 선언 : const 함수 내에서는 동일 클래스에 선언된 멤버 변수의 값을 변경하지 못함 + const 함수는 const가 아닌 함수를 호출하지 못함 -> 간접적인 멤버의 변경 가능성 차단 + const 상수화 객체는 const 멤버 함수만 호출이 가능 캡슐화 하나의 클래스가 하나의 목적을 위하여 연관된 함수와 변수들이 모여 있는 것 ex) A클래스의 캡슐화가..

[열혈 C++ 프로그래밍] (3) 클래스의 기본

클래스의 기본 C++ 구조체 클래스와 객체 객체지향 프로그래밍의 이해 C++ 구조체 연관 데이터를 묶어 구현 및 관리하기 용이하게 하기 위한 문법적 장치 구조체 내부의 함수들은 인라인 함수로 동작 -> 함수를 구조체 밖으로 이동 시 인라인 처리 X C++ 구조체 : - 구조체 내부에 함수와 enum 상수까지 선언 가능 - struct라는 키워드를 사용하는 클래스 - struct 선언 시 디폴트로 public 선언 클래스와 객체 클래스 연관 데이터와 연관 함수의 집합 - 클래스 선언 시 디폴트 private -> 접근 제어 선언 없이 외부에서 클래스 멤버 사용 불가 객체 : 클래스를 대상으로 생성된 변수 멤버 변수 : 클래스 내부에 선언된 변수 멤버 함수 : 클래스 내부에 선언된 함수 파일 분할 : - 헤..