국기 정규수업 17~18일차 메모

2015. 3. 30. 20:01창고

728x90
728x90

17일차 수업메모

구조체
 멤버 함수 : 메소드
 public 함수 - 인터페이스
 private 함수 - 내부에서 돌아가는 함수

 get set 을 만든다. 접근자 함수. private의 값을 구하기 위해.
 -------------------------------------------------------
 C++의 구조체와 클래스는 내부적으로 특수함수를 제공 - 생성사와 소멸자

 생성자 - 생성시 객체 할당 : 객체
 소멸자 - 객체 생성시 할당
 초기화까지 모두 포함- 초기화 + 인스턴스화
 생성자는 객체가 인스턴스 된 직후에 호출되는게 맞음
 인스턴스화 - 인스턴스를 포함하는 개념으로 객체가 메모리 잡고 초기화하고 생성자 안에서 초기화한다.
 이를 모두 모아 이 전 과정을 인스턴스화라고 한다.
 
 생성자가 하는 일
 인스턴스된 직후.
 초기화 되기 전.
 초기동작을 알아낸다.
 
 소멸자
 객체가 사라지기 직전에 호출된다.

 팁.
 객체 A의 메모리는 객체 A에서 처리한다.
 메니져라는걸 사용할 때는 메니져에게만 맡긴다. 내가 짠거는 내가 명확하게 지운다.
 +이닛(초기동작을 몰아버린다)과 릴리즈 또는 디스트로이(소멸 동작, 정리 동작을 여기서)
 -----------------------------------------------------------
 
 최대한 짧게! 간결하게!!

 구조체 선언
 - 맴버 변수 선언 방법 :  m_number

 한 개 이상의 생성자를 생성하면 디폴트 생성자를 호출하지않는다.

 변환생성자 - 암묵적인 형변환으로 인해

 기본적으로 제공하는 기능 - 디폴트 대입 연산자(얕은 복사), 디폴트 생성자, 소멸자
 explicit는 변환생성자를 사용하지 않겠다는 의미.
 못 찾는 에러 중에 하나!

 explicit가 없다면? 변환생성자겸 인자있는 생성자입니다.
 explicit가 있다면? 인자있는 생성자.
 *변환생성자는 쓰지마셈! explicit를 적극 사용하기!

 얕은 복사
 문제점
 깊은 복사
 

복사생성자

 복사생성자 - 디폴트 복사생성자는 기본적으로 클래스 생성 시 지원되는 항목 중 하나다
 디폴트 복사생성자는 얕은 복사를 지원해주며 값만 복사한다.
 깊은 복사를 하지 않는다면 그냥 디폴트로 제공되는 복사생성자를 사용하면 된다.
 메모리를 독립적으로 사용하는 클래스 객체끼리의 복사생성에는 따로 정의를 해서 사용해야 한다.

 정말 중요! 키워드들 기억!!
 1. 선언과 동시에 동일한 타입의 클래스 객체를 복사해서 생성할때
 2. call by value의 형태로 (reference 제외) 함수에 형식인수를 전달할때
 3. 함수에서 클래스 임시 객체를 반환할때


 연산자 오버로딩 알아야될 것! 아주 중요!!
 1. 누가 기준인가? 좌변! 좌변이 기준이 되고 우변이 인자가 된다.
 2. operator+까지가 함수라고 보면 된다.
 3. 리턴하는 형태를 주의. - 특히 레퍼런스 보낼때 조심. 메모리가 보존이 되는가?

 



18일자 수업 메모

// Lecture18.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//

#include "stdafx.h"
#include <iostream>
/*

 딥카피 실습
 deep copy - 카피의 형태가 값에 복사형태가 아니라 독립된 메모리 단위의 복사를 의미한다.
 객체 내부에 동적할당의 형태로 값이 있을 때,
 지원을 안 할거면 아예 막아라! <- 막는 방법이 있다.
 콜 바이 벨류 형태기때문에 레퍼런스 변수로 호출한다.

 겜프 문제
 
 클래스 자동으로 지원하는 다섯가지
 - 디폴트 생성자
 - 소멸자
 - 디폴트 복사 생성자
 - 대입 연산자
 - 타입 캐스팅

 ---------------------------------------------------
 클래스
 클래스는 타입 - 객체는 변수
 클래스를 일반적인 설계도로 많이 생각, 객체는 이 설계도로 실체화시킨 대상
 객체는 메모리가 있는 것. 클래스는 메모리를 갖지 않은 형틀.

 

추상화
 - 일반적인 대상이나 사물을 일반화와 단순화하여 데이터와 기능을 가진 하나의 정보로 만드는 것
 - 틀을 설계하는 것. 어떤 대상을 효율적으로 표현하기 위해
 - 특수상황을 제외한다.

 

추상 데이터 타입
 - 하나의 개념에서 추상화를 하여 클래스로 나온 것. 결과물. 1개 이상이 될 수 있다.
 + 필수항목 = 추상 자료구조
 사용자와 구현자의 관점에서 생각해봐야 한다.
 먼저 사용자의 입장에서 시작 -> 이 후 구현자의 입장으로 고고!
 사용자의 관점 - 철저하게 사용하는데 불편하면 안된다. 최대한 편하게.
 구현자의 관점 - 우선 사용자의 관점을 확실하게 구현할 수 있게.

 상속
 부모의 성질을 그대로 이어받은 자식이 태어나는 것.
 상위 클래스를 루트 클래스라고 하기도 함.
 자식은 부모의 규모와 같거나 크다.

 다형성
 형광등 소켓 -> 소켓만 끼우면 전구의 모양은 어떤 형태도 괜찮다.

 

맴버 이니셜라이져
 - const 상수 맴버 변수(static으로 선언한 상수는 제외)
 - 레퍼런스 멤버변수
 - 포함된 객체의 생성자 초기화
 - 상속관계에서 부모의 생성자 초기화

 상속관계의 생성자 소멸자 순서
 // 생성자
 부모의 생성자 -> 자식의 생성자

 // 소멸자
 자식의 소멸자 -> 부모의 소멸자

 

인라인
 인라인은 디파인처럼 코드를 대체하는 것을 말한다.

 1줄은 inline 적극활용
 2줄은 고민
 3줄은 안써

 한 파일 내에서 인라인을 취급할 수 있음.
 다른 파일로 분리되거나 최적화 수행

 __forceinline과 __inline 조사숙제, inline이 안되는 경우 더 조사!

 오버로딩 - 같은 이름으로 다른 기능을 하는 것
 연산자 오버로딩 - 기능의 확대, 사용자 정의타입도 기본 타입처럼 사용할 수 있는 것.

 friend keyword 조사

 전역, 클래스, 메소드 프랜드
 
 friend 연산자 오버로딩시 반환은 값에 의한 반환을 해야한다.
 왜냐하면 레퍼런스로 보낼 시 별명을 보냈지만 원본이 지역에서 사라진다.
 C++11에선 이 방법이 조금 개선되어있다.

*/




 

728x90
반응형