구조체 

-연관 있는 데이터를 묶을 수 있는 문법적 장치

 

C의 구조체와 다른점

1.구조체 변수를 선언할 때 struct 키워드를 생략하고 사용할 수 있음
  - C :        struct Car myCar;

  - C++ :    Car myCar

2.구조체 안에 함수 삽입 가능

 

*실제로는 모든 Car구조체 변수가 하나의 함수를 공유(하지만, 논리적으로 각각의 변수가 자신의 함수를 갖는다고 생각해도됨)

 

구조체 코드 예시

 

 

'Programming Language > C++' 카테고리의 다른 글

03-3 객체지향 프로그래밍  (0) 2019.07.19
03-2 클래스  (0) 2019.07.19
04-4 this포인터  (0) 2019.07.18
04-3 생성자와 소멸자  (0) 2019.07.18
04-2 const 키워드  (0) 2019.07.17

this 포인터

-객체 자신을 가리키는 용도로 사용되는 포인터

 

this 포인터 예시

 

참조값(참조의 정보)

-변수를 참조할 수 있는 값

 

int num=7;

int& ref=num; // 변수 num을 참조할 수 있는 참조의 정보가 전달됨

'Programming Language > C++' 카테고리의 다른 글

03-2 클래스  (0) 2019.07.19
03-1 C++의 구조체  (0) 2019.07.19
04-3 생성자와 소멸자  (0) 2019.07.18
04-2 const 키워드  (0) 2019.07.17
04-1 정보은닉, 캡슐화  (0) 2019.07.17

생성자

-객체가 생성될 때 생성과 동시에 초기화하기 위해 호출됨

-객체 생성 할 때만 한번만 호출됨

 

생성자 형태

-클래스의 이름과 함수의 이름이 동일

-반환형 x, 실제로 반환 x

 

생성자 특징

-오버로딩 가능(생성자도 함수의 일종이라)

-매개변수에 디폴트 값 설정 가능

 

객체의 생성과정

1.메모리공간의할당

2.initializer를 이용한 멤버변수의 초기화

3.생성자의 몸체부분 실행

 

생성자 예시 코드

 

멤버 이니셜라이저(Member Initializer)

-멤버변수를 선언과 동시에 초기화(그런 형태로 바이너리 코드가 구성됨)

-initializer는 멤버변수로 선언된 객체의 생성자 호출에 활용됨

 

멤버 이니셜라이저 장점

-초기화의 대상 명확히 인식

-성능에 이점

 

멤버 이니셜라이저 예시 코드

멤버 이니셜라이저를 이용한 const상수 초기화

-const멤버변수(선언과 동시에 초기화해야함)도 이니셜라이저를 이용해만 초기화 가능(이니셜라이저를 이용하면 선언과 동시에 초기화가 이뤄지는 형태이기 때문에 )

멤버 이니셜라이저를 이용한 참조자 선언

-참조자도 선언과 동시에 초기화가 이루어져야 되기 때문에 이니셜라이저를 통해서만 초기화 가능

 

 

private 생성자

-클래스 내부에서만 객체의 생성을 허용하는 목적으로 사용함

<주의할점>

Rectangle rec() - 이렇게  하면 함수 원형 선언과 표현이 겹치기 때문에 사용 불가 (x)

Rectangle rec; - 이렇게 생성해야함

Rectangle rec(100); - 매개변수가 있는 경우

 

Rectangle* rec1=new Rectangle; - 표현 가능

Rectangle* rec2=new Rectangle(); - 동적할당할 때는 이렇게 표현가능
Rectangle* rec3=new Rectangle(100);

 

 

============================================================================

소멸자

-객체소멸시 반드시 호출됨

-소멸자는 생성자에서 할당한 리소스의 소멸에 사용

 

소멸자 형태

-클래스의 이름 앞에 '~'가 붙음

-반환형 x, 실제로 반환 x

-매개변수는 void형으로 선언되기 때문에 오버로딩,디폴트 값 설정 불가

-소멸자 명시해주지 않으면 디폴트 소멸자가 자동으로 삽입됨

 

소멸자 예시

 

 

 

 

'Programming Language > C++' 카테고리의 다른 글

03-1 C++의 구조체  (0) 2019.07.19
04-4 this포인터  (0) 2019.07.18
04-2 const 키워드  (0) 2019.07.17
04-1 정보은닉, 캡슐화  (0) 2019.07.17
05-2 얕은 복사, 깊은 복사  (0) 2019.07.17

const 변수

-선언과 동시에 초기화 해줘야함

 

 

const 함수

-함수 내에서 동일 클래스 내에 선언된 멤버변수에 저장된 값을 변경하지 않겠다는 의미

-const함수 내에서는 const가 아닌 함수의 호출이 제한됨(아닌 함수가 값을 변경할 수 있는 가능성이 있기때문)

'Programming Language > C++' 카테고리의 다른 글

04-4 this포인터  (0) 2019.07.18
04-3 생성자와 소멸자  (0) 2019.07.18
04-1 정보은닉, 캡슐화  (0) 2019.07.17
05-2 얕은 복사, 깊은 복사  (0) 2019.07.17
05-1 복사생성자  (0) 2019.07.17

정보은닉

-멤버변수를 private으로 선언하고, 해당 변수에 접근하는 함수를 별도로 정의해서, 안전한 형태로 멤버변수의 접근을 유도하는 것

 

캡슐화

-관련 있는 모든 것을 하나의 클래스 안에 묶어 두는 것

*캡슐화는 목적이나 상황에 따라 범위가 달라짐

'Programming Language > C++' 카테고리의 다른 글

04-3 생성자와 소멸자  (0) 2019.07.18
04-2 const 키워드  (0) 2019.07.17
05-2 얕은 복사, 깊은 복사  (0) 2019.07.17
05-1 복사생성자  (0) 2019.07.17
07-3 private,protected,public 상속  (0) 2019.07.16

디폴트 복사 생성자의 문제점

-얕은 복사(멤버 대 멤버를 단순히 복사함)

-얕은 복사를 하게 되면 여러개의 객체가 동일한 주소를 가진 문자열을 가리키는 상황이 발생!

 

깊은 복사

-멤버 뿐 아니라, 포인터로 참조하는 대상까지 깊게 복사

 

 

 

'Programming Language > C++' 카테고리의 다른 글

04-2 const 키워드  (0) 2019.07.17
04-1 정보은닉, 캡슐화  (0) 2019.07.17
05-1 복사생성자  (0) 2019.07.17
07-3 private,protected,public 상속  (0) 2019.07.16
07-2 상속의 문법  (0) 2019.07.16

<복사생성자 사용하는 이유>

-변수 끼리 대입 연산 시 경우의 수가 너무 많음(기본자료형끼리는 간단해도 객체끼리는 복잡함)

-C++이 우리가 대입 시 일어날 수 있을 정의할 수 있게 해줌

-이를 정의하기 위해 "복사생성자"가 필요

 

<복사생성자 호출되는 시점(공통점- 객체를 새로 생성할 때 생성과 동시에 동일한 자료형의 객체로 초기화해야하는 경우)>

1. 기존에 생성된 객체를 이용해서 새로운 객체를 초기화하는 경우

2. Call-by-value 방식의 함수호출 과정에서 객체를 인자로 전달하는 경우

3. 객체를 반환하되, 참조형으로 반환하지 않는 경우

 

*이미 생성된 변수끼리의 대입연산은 연산자 오버로딩= 함수를 호출

-ex)app1=app2

 

<묵시적 변환>

복사생성자를 이해하기 위해서는 다음 문장의 의미를 알 필요가 있음

SoSimple sim2=sim1;

SoSimple sim2(sim1);

첫번째 문장이 두번째 문장의 형태로 묵시적 변환이 됨

 

<explicit>

-복사 생성자의 묵시적 변환을 막는 키워드

SoSimple sim2(sim1)

-이런 형식으로 대입연산을 해주어야함

 

 

<임시객체>

-임시객체가 생성된 위치에서는 임시객체의 참조값이 반환됨

-임시객체는 다음행으로 넘어가면 바로 소멸됨

*참조자에 참조되는 임시객체는 바로 소멸되지 않음

 

<유의점>

-임시 객체가 새로운 객체에 대입되는 경우 복사생성자 호출안됨

-첫번째 소멸자는 GetMonster의 매개변수 mon의 소멸자 호출이고

-프로그램이 끝날때까지 GetMonster의 반환으로 생성된 Monster객체는 mon2라는 이름으로 할당되어 살아있음

 

 

 

 

'Programming Language > C++' 카테고리의 다른 글

04-1 정보은닉, 캡슐화  (0) 2019.07.17
05-2 얕은 복사, 깊은 복사  (0) 2019.07.17
07-3 private,protected,public 상속  (0) 2019.07.16
07-2 상속의 문법  (0) 2019.07.16
07-1 상속의 필요성  (0) 2019.07.16

-private으로 선언될 경우 상속받는 멤버를 private접근으로 제한

//주의점 : Base Class의 변수 두개가 private,public이 있는데 이걸 상속할경우

class Derived : private Base

{

//Derived클래스에서 접근불가(이유는 접근제한의 기준이 클래스 기준이기 때문에,객체 기준이 아니라)

접근불가 : 

 int num1;

//상속받으면서 private으로 접근제한이 변경된 것이라 접근 가능

private :

 int num2;

}

 

-protected으로 선언될 경우 상속받는 멤버를 protected접근으로 제한

-public으로 선언될 경우 상속받는 멤버를 public접근으로 제한

-쉽게 생각해서, 접근범위를 축소하는 기능이라고 생각하면됨

 

'Programming Language > C++' 카테고리의 다른 글

05-2 얕은 복사, 깊은 복사  (0) 2019.07.17
05-1 복사생성자  (0) 2019.07.17
07-2 상속의 문법  (0) 2019.07.16
07-1 상속의 필요성  (0) 2019.07.16
06-3 C++의 static  (0) 2019.07.16

상속

-상속을 하게되면, 상속의 대상이 되는 클래스의 멤버까지도 객체 내에 포함됨

*주의해야할점이 Base class로부터 상속받은 멤버는 private으로 선언되었을 경우 접근이 불가능(정보은닉)

상속 예시

-Dervied class의 생성자는 Base class의 초기화에 대한 책임을 짐(생성자의 인자로 초기화할 값을 받음)

-Derived class의 멤버 초기화와 Base class의 멤버 초기화는 각각 자신의 생성자를 통해서 초기화하는 것이 가장 안정적(당시에 초기화의 내용 및 방법이 결정되므로)

 

-객체생성시 순서(메모리 공간 할당-유도클래스 생성자 호출-기초클래스 생성자 호출 및 실행- 유도클래스 생성자 실행)

-객체소멸시 순서(스택이라 생각하면 됨, 유도클래스 소멸자 호출 및 실행 - 기초클래스 소멸자 호출 및 실행)

 -생성자에서 동적 할당한 메모리 공간을 소멸자에서 해체함

 

'Programming Language > C++' 카테고리의 다른 글

05-1 복사생성자  (0) 2019.07.17
07-3 private,protected,public 상속  (0) 2019.07.16
07-1 상속의 필요성  (0) 2019.07.16
06-3 C++의 static  (0) 2019.07.16
06-2 클래스와 함수에 대한 friend 선언  (0) 2019.07.15

상속을 사용하는 이유

1.기능의 추가에 따른 프로그램의 확장성(새로운 클래스가 추가될 때)

2.기존 클래스의 재활용

'Programming Language > C++' 카테고리의 다른 글

07-3 private,protected,public 상속  (0) 2019.07.16
07-2 상속의 문법  (0) 2019.07.16
06-3 C++의 static  (0) 2019.07.16
06-2 클래스와 함수에 대한 friend 선언  (0) 2019.07.15
06-1 const 개념  (0) 2019.07.15

+ Recent posts