객체:
의사나 행위가 미치는 대상
문장 내에서 동사의 행위가 미치는 대상
프로그래밍적 의미:
데이터와 그 데이터에 관련되는 동작(절차,방법,기능)을 모두 포함한 개념
클래스 라는 자료형으로 선언한 변수
클래스:
객체 지향 프로그래밍에서 객체를 생성하기 위한 기본 템플릿
객체:
클래스로 만든 하나의 변수
붕어판틀(클래스)과 붕어빵(객체)
설계도(클래스)와 제품(객체)
정보은닉:
클래스 외부에서 알필요가 없는 정보에 대해서는 접근을 제어하여 알수없도록 은닉하는것
단순히 외부에 데이터 공개를 차단하는것
캡슐화:
외부와 약속된 부분을 제외한 나머지 부분을 감싸서 숨겨버리는것
특정 기능 단위로 모으고 약속된 부분만 공개한다.(약속된 부분을 인터페이스라고한다)
예: 감기약(알약안에 무엇이 들어있는지 모른다)
정보은닉과 캡슐화 차이:
정보은닉은 정보를 숨기는 그 자체를 의미
캡슐화는 약속된 부분은 공개하고 나머지 부분을 숨긴다
캡슐화는 숨기는 부분들이 하나의 기능 단위로 묶인다.
상속:
기존의 클래스를 토대로 새로운 클래스를 만드는 것
기존의 클래스의 기능을 확장하거나,세분화한다.
예: 붕어빵을 상속받아 수염 달린붕어빵을 만든다.
다형성:
부품으로 사용하는 객체를 다른 객체로 교체하는것
부품객체에서 약속된 부분이 같다면 교체가 가능하다
부품을 교체하여 기능을 변경하여 다형성을 추구한다.
재사용성:
객체가 다른 부품으로 사용되어 지는것
이미 완성한 객체를 다른 시스템에 사용하는것
재활용
추상화:
추상적인 개념을 구체적으로 만들어낸다.
예: 달리다 비행 같은것을 클래스로 만든다.
--> 클래스 기본개념
생성자:
클래스가 메모리에 할당될때 자동으로 호출된다.
정의 하지않아도 기본 함수가 제공된다
생성자 오버로딩:
사용자 임의로 생성자 오버로딩을 할수있다
여러개 정의 가능
생성자를 직접 정의 하면 기본 생성자는 제공하지않는다.
생성자에 따라서 변수 선언 방법이 달라진다
this
클래스 내부에 자동 선언되는 클래스 포인터
선언된 객체의 주소를 저장하고있다
클래스 내부에서만 사용할수있다.
상수 포인터이다(임의로 변경 불가능)
나 자신을 가리키는것이다.연산자 오버로딩,나자신과 관련한 먼가를 할때 필요함
전달된 매개변수와 지역변수를 구별하기 위하여 사용되기도 한다.
접근 제어 지정자
private
public:
protected
외부에서 클래스에 접근에 관한 등급을 지정
해당 지정자 밑에 정의된 멤버의 등급을 지정한다.
아무 지정자가 없을경우는 private 이다.
생성자와 소멸자
클래스 외부에서 변수가 생성될때 호출된다.
외부에서 접근이 가능하여야한다.
public 으로 해주어야만 한다.
생성자나 소멸나가 private:,protected라면?
외부에서 생성 소멸을 할수가 없다
static:
static 멤버는 클래스 이름 공간에 정적으로 할당이 된다.
스태틱 멤버는 객체를 선언하지않아도 사용할수있다
정적 할당이므로 메인 함수 호출 이전에 생성된다.
정적 변수의 특성 때문에 선언된 객체에 관계없이 한개만 존재한다.
클래스 내부 어디든 공용으로 즉 전역으로 사용가능하다.
스태틱 변수:
객체 선언없이도 사용가능
사용하려면 회부에서 초기화를 해야만 한다
객체끼리 공유한다.
스태틱 멤버 함수:
객체 선언없이도 사용가능
객체의 소유가 아니므로 디스를 사용할수없다.
정적을 제외한 일반 멤버 변수를 사용할수없다.
클래스에서 스태틱정리
클래스에ㅓ 존재하지만, 객체와는 거리가 존재한다.
객체에게 있어 스태틱 멤버는 파견 나온 타 부대원들
간단하게는 사용할수있지만,깊게 관여 할수없다.
const 멤버 변수의 초기화
생성자에서 해도 불가능하다.
const int Data;
Cclass(){Data = 10;}--> const 로 선언과 동시에 미리 초기화됬기때문에 다시 10으로 초기화할수없음
멤버 이니셜 라이저
객체의 생성과 동시에 초기화를 해주는 방법
생성자함수와 { 사이에서 초기화한다.
형식:
변수(초기화값),변수(초기화값)
const 멤버 함수
함수 내부에서 멤버 변수의 값을 변경할수없다.
변경하는 소스가 있는 경우 컴파일 에러가남
멤버 변수의 값이 변경되지 않음을 보장한다
함수의 선언부 오른쪽에 const 를 적는다.
const int *a; --> 값을 못바꾸고 주소를 바꿀수있음
int * const a;--> 주소를 못바꾸고 값을 바꿀수있음
const int* const a; == const int*a; 와 같다.
깊은 복사와 얕은 복사:
***줄단위 입력--> cin.getline