C++
구조체 ~ 복사 생성자
구조체
 C++의 구조체는 Class의 일종
 연관 있는 데이터를 묶을 수 있는 문법적 장치
struct Car basicCar;
struct Car simpleCar;
구조체 내 선언
 함수 선언
 C++안에서는 구조체 안에 함수를 삽입하는 것을 허용.
 함수가 구조체 내에 삽입되면 구조체 내에 선언된 변수에 직접접근이 가능해진다.
 함수 정의를 구조체 밖에서 할 수 있다.(원형 선언을 구조체 내부, 정의를 구조체 밖)
 Enum 선언
 구조체 내에서만 유효한 상수를 정의
클래스(Class)
 키워드 Class를 사용하여 클래스 선언.
 클래스 내에 선언된 변수는 클래스 내에 선언된 함수에서만 접근이 가능
 접근 제어 지시자
 public : 어디서든 접근 허용
 protected : 상속 관계에 놓여있을 때, 유도 클래스에서의 접근 허용
 Private : 클래스 내에서만 접근 허용
객체(object), 맴버변수, 맴버함수
 객체(Object)
 클래스의 실체화
 하나 이상의 데이터와 하나 이상의 함수로 구성된다.
 맴버 변수
 클래스를 구성하는(클래스 내에 선언된) 변수를 가리킨다.
 맴버 함수
 클래스를 구성하는(클래스 내에 정의된) 함수를 가리킨다.
객체 간 Message Passing 방법
 관계를 형성하는 둘 이상의 클래스가 필요하다.
 함수 호출을 기반으로 하여 하나의 객체가 다른 하나의 객체에게 메시지를 전달
한다.
정보 은닉
 제한된 방법으로의 접근만 허용을 해서 잘못된 값이 저장되지 않도록 도와야 한
다. (실수 시, 실수가 쉽게 발견 되도록 해야 한다.)
 멤버 변수를 private으로 선언하고, 해당 변수에 접근하는 함수를 별도로 정의하
여 안전한 형태로 멤버 변수의 접근을 유도하는 것
 Access Function
 멤버변수를 private으로 선언하면서, 클래스 외부에서의 멤버변수 접근을 목적으로
정의되는 함수
const 함수
 멤버변수에 저장된 값을 변경하지 않겠다는 선언이다.
 const 선언이 추가된 멤버함수 내에서 멤버변수의 값을 변경하는 코드가 삽입되
면, 컴파일 에러가 발생한다.
 const 함수 내에서는 const가 아닌 함수의 호출이 제한된다.
 const 참조자를 대상으로 값의 변경 능력을 가진 함수의 호출을 허용하지 않는다.
생성자(Constructor)&소멸자
(Destructor)
 생성자
 객체 생성과 동시에 초기화를 한다.
 객체 생성시 딱 한 번 호출 된다.
 클래스 이름이 함수 이름과 동일, 반환형이 선언되어 있지 않다.
 오버로딩 및 매개변수에 ‘디폴트 값‘ 설정이 가능하다.
 소멸자
 객체소멸 시 반드시 호출되는 것.
 반환형이 선언되어 있지 않고, 실제로 반환하지 않는다.
 오버로딩 및 디폴트 값 설정도 불가능하다.
this 포인터
 객체 자신을 가르키는 용도
 this=객체자신의 주소 값
 this 포인터는 그 주소 값과 자료형이 정해져 있지 않은 포인터이다.
깊은 복사와 얕은 복사
 얕은 복사(복사 생성자)
 멤버 대 멤버의 복사를 진행
 Heap의 메모리 공간을 참조하는 경우 문제가 생김
name
age
A 객체
name
age
B 객체
문자열
참조
참조
문제의 경우
깊은 복사와 얕은 복사
 깊은 복사
 멤버뿐만 아니라, 포인터로 참조하는 대상까지 깊게 복사한다.
 멤버 대 멤버 복사
 메모리 공간 할당 후 문자열 복사
name
age
A 객체
name
age
B 객체
문자열
참조
참조
문자열
복사 상생자 호출 시기?
1. 기존에 생성된 객체를 이용해서 새로운 객체를 초기화하는 경우
2. Call-by-value 방식의 함수 호출 과정에서 객체를 인자로 전달하는 경우
3. 객체를 반환하되, 참조형으로 반환하지 않는 경우

C++ struct copy

  • 1.
  • 2.
    구조체  C++의 구조체는Class의 일종  연관 있는 데이터를 묶을 수 있는 문법적 장치 struct Car basicCar; struct Car simpleCar;
  • 3.
    구조체 내 선언 함수 선언  C++안에서는 구조체 안에 함수를 삽입하는 것을 허용.  함수가 구조체 내에 삽입되면 구조체 내에 선언된 변수에 직접접근이 가능해진다.  함수 정의를 구조체 밖에서 할 수 있다.(원형 선언을 구조체 내부, 정의를 구조체 밖)  Enum 선언  구조체 내에서만 유효한 상수를 정의
  • 4.
    클래스(Class)  키워드 Class를사용하여 클래스 선언.  클래스 내에 선언된 변수는 클래스 내에 선언된 함수에서만 접근이 가능  접근 제어 지시자  public : 어디서든 접근 허용  protected : 상속 관계에 놓여있을 때, 유도 클래스에서의 접근 허용  Private : 클래스 내에서만 접근 허용
  • 5.
    객체(object), 맴버변수, 맴버함수 객체(Object)  클래스의 실체화  하나 이상의 데이터와 하나 이상의 함수로 구성된다.  맴버 변수  클래스를 구성하는(클래스 내에 선언된) 변수를 가리킨다.  맴버 함수  클래스를 구성하는(클래스 내에 정의된) 함수를 가리킨다.
  • 6.
    객체 간 MessagePassing 방법  관계를 형성하는 둘 이상의 클래스가 필요하다.  함수 호출을 기반으로 하여 하나의 객체가 다른 하나의 객체에게 메시지를 전달 한다.
  • 7.
    정보 은닉  제한된방법으로의 접근만 허용을 해서 잘못된 값이 저장되지 않도록 도와야 한 다. (실수 시, 실수가 쉽게 발견 되도록 해야 한다.)  멤버 변수를 private으로 선언하고, 해당 변수에 접근하는 함수를 별도로 정의하 여 안전한 형태로 멤버 변수의 접근을 유도하는 것  Access Function  멤버변수를 private으로 선언하면서, 클래스 외부에서의 멤버변수 접근을 목적으로 정의되는 함수
  • 8.
    const 함수  멤버변수에저장된 값을 변경하지 않겠다는 선언이다.  const 선언이 추가된 멤버함수 내에서 멤버변수의 값을 변경하는 코드가 삽입되 면, 컴파일 에러가 발생한다.  const 함수 내에서는 const가 아닌 함수의 호출이 제한된다.  const 참조자를 대상으로 값의 변경 능력을 가진 함수의 호출을 허용하지 않는다.
  • 9.
    생성자(Constructor)&소멸자 (Destructor)  생성자  객체생성과 동시에 초기화를 한다.  객체 생성시 딱 한 번 호출 된다.  클래스 이름이 함수 이름과 동일, 반환형이 선언되어 있지 않다.  오버로딩 및 매개변수에 ‘디폴트 값‘ 설정이 가능하다.  소멸자  객체소멸 시 반드시 호출되는 것.  반환형이 선언되어 있지 않고, 실제로 반환하지 않는다.  오버로딩 및 디폴트 값 설정도 불가능하다.
  • 10.
    this 포인터  객체자신을 가르키는 용도  this=객체자신의 주소 값  this 포인터는 그 주소 값과 자료형이 정해져 있지 않은 포인터이다.
  • 11.
    깊은 복사와 얕은복사  얕은 복사(복사 생성자)  멤버 대 멤버의 복사를 진행  Heap의 메모리 공간을 참조하는 경우 문제가 생김 name age A 객체 name age B 객체 문자열 참조 참조 문제의 경우
  • 12.
    깊은 복사와 얕은복사  깊은 복사  멤버뿐만 아니라, 포인터로 참조하는 대상까지 깊게 복사한다.  멤버 대 멤버 복사  메모리 공간 할당 후 문자열 복사 name age A 객체 name age B 객체 문자열 참조 참조 문자열
  • 13.
    복사 상생자 호출시기? 1. 기존에 생성된 객체를 이용해서 새로운 객체를 초기화하는 경우 2. Call-by-value 방식의 함수 호출 과정에서 객체를 인자로 전달하는 경우 3. 객체를 반환하되, 참조형으로 반환하지 않는 경우

Editor's Notes

  • #5 클래스와 구조체 모두 접근 제어 지시자를 사용할 수 있지만 사용하지 않을 경우 클래스는 private, 구조체는 public으로 선언한다.
  • #8 Cf) 캡슐화 – 둘 이상의 기능이 모여서 하나의 기능을 달성함.
  • #12 본 경우는 문자열을 두 개의 객체가 동시에 참조한다. B객체가 소멸하게 되면 A 객체는 참조할 수 있는 문자열이 사라져버리게 된다.