SlideShare a Scribd company logo
1 of 13
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. 객체를 반환하되, 참조형으로 반환하지 않는 경우

More Related Content

What's hot

Scala companion object
Scala companion objectScala companion object
Scala companion objectYong Joon Moon
 
Scala type class pattern
Scala type class patternScala type class pattern
Scala type class patternYong Joon Moon
 
Scala self type inheritance
Scala self type inheritanceScala self type inheritance
Scala self type inheritanceYong Joon Moon
 
JavaScript Fundermetal
JavaScript FundermetalJavaScript Fundermetal
JavaScript FundermetalKwangho SEO
 
생코자바스크립트스터디3장
생코자바스크립트스터디3장생코자바스크립트스터디3장
생코자바스크립트스터디3장Jinhwa Hong
 
Javascript closure 2차과제 이승찬
Javascript closure 2차과제 이승찬Javascript closure 2차과제 이승찬
Javascript closure 2차과제 이승찬승찬 이
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2문익 장
 
Javascript - Function
Javascript - FunctionJavascript - Function
Javascript - Functionwonmin lee
 
[Swift] Generics
[Swift] Generics[Swift] Generics
[Swift] GenericsBill Kim
 
Chap10.Making Method Calls Simpler
Chap10.Making Method Calls SimplerChap10.Making Method Calls Simpler
Chap10.Making Method Calls SimplerTaemin Park
 
파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기Yong Joon Moon
 
모던 자바스크립트 Deep Dive Review
모던 자바스크립트 Deep Dive Review모던 자바스크립트 Deep Dive Review
모던 자바스크립트 Deep Dive ReviewDataUs
 
Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입Park Jonggun
 
비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6민태 김
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표재정 이
 
게임프로그래밍입문 7
게임프로그래밍입문 7게임프로그래밍입문 7
게임프로그래밍입문 7Yeonah Ki
 
Swift3 : class and struct(+property+method)
Swift3 : class and struct(+property+method)Swift3 : class and struct(+property+method)
Swift3 : class and struct(+property+method)승욱 정
 

What's hot (20)

Scala companion object
Scala companion objectScala companion object
Scala companion object
 
Scala type class pattern
Scala type class patternScala type class pattern
Scala type class pattern
 
Scala self type inheritance
Scala self type inheritanceScala self type inheritance
Scala self type inheritance
 
Scala trait usage
Scala trait usageScala trait usage
Scala trait usage
 
Scala dir processing
Scala dir processingScala dir processing
Scala dir processing
 
JavaScript Fundermetal
JavaScript FundermetalJavaScript Fundermetal
JavaScript Fundermetal
 
Scala match pattern
Scala match patternScala match pattern
Scala match pattern
 
생코자바스크립트스터디3장
생코자바스크립트스터디3장생코자바스크립트스터디3장
생코자바스크립트스터디3장
 
Javascript closure 2차과제 이승찬
Javascript closure 2차과제 이승찬Javascript closure 2차과제 이승찬
Javascript closure 2차과제 이승찬
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2
 
Javascript - Function
Javascript - FunctionJavascript - Function
Javascript - Function
 
[Swift] Generics
[Swift] Generics[Swift] Generics
[Swift] Generics
 
Chap10.Making Method Calls Simpler
Chap10.Making Method Calls SimplerChap10.Making Method Calls Simpler
Chap10.Making Method Calls Simpler
 
파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기
 
모던 자바스크립트 Deep Dive Review
모던 자바스크립트 Deep Dive Review모던 자바스크립트 Deep Dive Review
모던 자바스크립트 Deep Dive Review
 
Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입
 
비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표
 
게임프로그래밍입문 7
게임프로그래밍입문 7게임프로그래밍입문 7
게임프로그래밍입문 7
 
Swift3 : class and struct(+property+method)
Swift3 : class and struct(+property+method)Swift3 : class and struct(+property+method)
Swift3 : class and struct(+property+method)
 

Similar to C++ struct copy

이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디quxn6
 
2014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #62014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #6Chris Ohk
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6Injae Lee
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4성연 김
 
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩해강
 
파이썬 객체 클래스 이해하기
파이썬  객체 클래스 이해하기파이썬  객체 클래스 이해하기
파이썬 객체 클래스 이해하기Yong Joon Moon
 
2014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #72014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #7Chris Ohk
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디quxn6
 
C# 고급 문법 part 1
C# 고급 문법 part 1C# 고급 문법 part 1
C# 고급 문법 part 1준영 박
 
파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310Yong Joon Moon
 
파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 Yong Joon Moon
 
9 object class
9 object class9 object class
9 object class웅식 전
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java유리 하
 
[Swift] Access control
[Swift] Access control[Swift] Access control
[Swift] Access controlBill Kim
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부quxn6
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기 Yong Joon Moon
 
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++Min-soo Park
 
Python class
Python classPython class
Python classHerren
 
파이썬 기초
파이썬 기초 파이썬 기초
파이썬 기초 Yong Joon Moon
 

Similar to C++ struct copy (20)

이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디
 
2014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #62014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #6
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4
 
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
 
파이썬 객체 클래스 이해하기
파이썬  객체 클래스 이해하기파이썬  객체 클래스 이해하기
파이썬 객체 클래스 이해하기
 
2014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #72014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #7
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디
 
C# 고급 문법 part 1
C# 고급 문법 part 1C# 고급 문법 part 1
C# 고급 문법 part 1
 
파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310
 
파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기
 
9 object class
9 object class9 object class
9 object class
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
[Swift] Access control
[Swift] Access control[Swift] Access control
[Swift] Access control
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부
 
Java(2/4)
Java(2/4)Java(2/4)
Java(2/4)
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기
 
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
 
Python class
Python classPython class
Python class
 
파이썬 기초
파이썬 기초 파이썬 기초
파이썬 기초
 

C++ struct copy

  • 2. 구조체  C++의 구조체는 Class의 일종  연관 있는 데이터를 묶을 수 있는 문법적 장치 struct Car basicCar; struct Car simpleCar;
  • 3. 구조체 내 선언  함수 선언  C++안에서는 구조체 안에 함수를 삽입하는 것을 허용.  함수가 구조체 내에 삽입되면 구조체 내에 선언된 변수에 직접접근이 가능해진다.  함수 정의를 구조체 밖에서 할 수 있다.(원형 선언을 구조체 내부, 정의를 구조체 밖)  Enum 선언  구조체 내에서만 유효한 상수를 정의
  • 4. 클래스(Class)  키워드 Class를 사용하여 클래스 선언.  클래스 내에 선언된 변수는 클래스 내에 선언된 함수에서만 접근이 가능  접근 제어 지시자  public : 어디서든 접근 허용  protected : 상속 관계에 놓여있을 때, 유도 클래스에서의 접근 허용  Private : 클래스 내에서만 접근 허용
  • 5. 객체(object), 맴버변수, 맴버함수  객체(Object)  클래스의 실체화  하나 이상의 데이터와 하나 이상의 함수로 구성된다.  맴버 변수  클래스를 구성하는(클래스 내에 선언된) 변수를 가리킨다.  맴버 함수  클래스를 구성하는(클래스 내에 정의된) 함수를 가리킨다.
  • 6. 객체 간 Message Passing 방법  관계를 형성하는 둘 이상의 클래스가 필요하다.  함수 호출을 기반으로 하여 하나의 객체가 다른 하나의 객체에게 메시지를 전달 한다.
  • 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

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