-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

C언어에서의 static 개념

1. 전역변수에 선언된 static의 의미

-선언된 파일 내에서만 참조를 허용하겠다는 의미

2. 함수 내에 선언된 static의 의미
-한번만 초기화되고, 함수를 빠져나가도 소멸 안됨

 

 

static 멤버 변수(클래스 변수)

-프로그램 시작 시, 메모리 공간에 딱 하나만 할당이 되어서 공유되는 변수

-클래스 안에 작성되어 있지만 staic변수는 객체 외부에 있음

-단지, static변수가 작성되어져 있는 객체에게 멤버변수처럼 접근할 수 있는 권한을 준 것

 

 

-똑같은 이름으로 static변수를 선언해도 클래스에 따라 구분이 됨

 

 

static멤버변수 예시

-static변수를 생성자에서 초기화하면 안되는 이유는 객체가 생성될 때마다 static변수가 0으로 초기화 되기 때문

 

 

static 멤버함수

-선언된 클래스의 모든 객체가 공유함

-public으로 선언되면, 클래스의 이름을 이용해서 호출이 가능

-객체의 외부에 존재함(멤버가 아님)

 

static 멤버함수 예시

-static 멤버함수 내에서는 static멤버변수, static멤버함수만 호출이 가능

 -static멤버함수는 객체의 멤버로 존재하지 않기 때문, 객체 생성 이전에도 static멤버함수는 호출이 가능(객체가 생성되지 않았기 때문에 객체의 멤버변수에 접근하는 것은 말이 안됨)

 

 

const static 멤버

-const멤버변수(상수)의 초기화는 intializer를 통해야 했지만,

const static으로 선언되는 멤버변수(상수)는 다음과 같이 선언과 동시에 초기화가 가능

 

 

mutable

-const함수 내에서의 값의 변경을 예외적으로 허용

-제한적으로 예외적인 경우에 사용해야함

 

 

 

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

07-2 상속의 문법  (0) 2019.07.16
07-1 상속의 필요성  (0) 2019.07.16
06-2 클래스와 함수에 대한 friend 선언  (0) 2019.07.15
06-1 const 개념  (0) 2019.07.15
16-6 dynamic_cast와 static_cast 차이  (0) 2019.06.27

friend

-클래스의 friend 선언(A클래스가 B클래스 대상으로 friend 선언하면, B클래스는 A클래스의 private 멤버에 접근 가능, 역은 불가능)  

-함수의 friend 선언(함수에 선언하면 자신이 선언된 클래스의 private 영역에 접근이 가능)

 

클래스 friend선언 예시

 

 

멤버함수, 전역함수 friend선언 예시

*friend void ShowPointPos(cosnt Point&);

-이 문장에는 2가지 의미가 있다

1.ShowPointPos라는 함수가 있다!

2.이 함수를 friend선언 하겠다

-따라서, friend선언을 위해서 별도의 함수원형을 선언할 필요는 없음

 

*friend선언은 필요한 상황에서만 극히 소극적으로 사용해야함

-정보은닉 해침, coupling강해짐

 

 

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

07-1 상속의 필요성  (0) 2019.07.16
06-3 C++의 static  (0) 2019.07.16
06-1 const 개념  (0) 2019.07.15
16-6 dynamic_cast와 static_cast 차이  (0) 2019.06.27
16-5 C++ 형 변환 연산자 - reinterpret_cast  (0) 2019.06.27

const 사용하는 경우

-변수를 상수화(데이터 변경을 허용하지 않음, 객체일 경우 멤버변수의 변경 허용하지 않음)

-멤버변수를 const 선언(데이터 변경 불가)

-멤버함수를 const 선언(함수 내에서 데이터 변경을 허용하지 않음, 읽기전용함수를 작성할때 사용)

 

*const의 선언 유무도 함수 오버로딩의 조건에 해당됨

 

 

 

 

 

공통 : 둘다 상속 관계의 클래스의 형 변화에서 사용

 

dynamic_cast

-안정적인 형 변환을 보장함

-프로그램 실행 동안에 안전성을 검사하도록 컴파일러가 바이너리 코드를 생성

-대신, 속도가 느림

-안정적이지 못한 형 변환을 하는 경우 NULL반환(만약, 참조자가 형 변환 연산후 대입대상인 경우 bad_cast예외를 발생시킴)

 

static_cast

-안전성 보장 안함(프로그래머가 책임짐)

-컴파일러가 무조건 형 변환이 되도록 바이너리 코드 생성

 

 

 

 

 

<사용 경우>

-상관없는 자료형으로의 형 변환

-포인터를 대상으로 하는, 포인터와 관련이 있는 모든 유형의 형 변환을 허용

 

<예시>

reinterpret_cast<T>(expr)

 

<코드>

const_cast : 포인터와 참조자의 const성향을 제거하는 형 변환을 목적으로 사용

 

<예시>

const_cast<T>(expr)

 

<사용경우>

-포인터와 참조자의 const성향을 제거하는 형 변환을 목적으로 사용

-함수의 인자 전달 시 const선언으로 형의 불일치가 발생해서 인자전달이 불가능한 경우 유용

 

<코드>

static_cast

-유도 클래스의 포인터 및 참조형 데이터를 기초 클래스의 포인터 및 참조형 데이터로 형 변환하거나 그 반대도 가능

-대신, 프로그래머가 오류에 대한 책임을 짐

 

<사용경우>

상속관계에서 놓여있는 두 클래스 사이에서, 기초 클래스의 포인터 및 참조형 데이터를 유도 클래스의 포인터 및 참조형 데이터로 형 변환할 경우

 

<예시>

static_cast<T>(expr)

 

<코드>

 

+ Recent posts