-호출 함수 (calling function) / 호출 받는 함수 (callee function)
-함수 호출 : caller가 callee를 호출하여 인자를 받아 일을 하고 return value
=> caller -> callee
-추상화 : 필요한 속성을 이용하여 단순화, 불필요한 부분을 제거 생략하여 복잡한 문제를 해결
-추상화 종료 2가지
-데이터 추상화) interger, char, string 등 하나의 새로운 data type
-제어 추상화) 절차를 단순화 , 함수 작성 후 함수를 호출
-추상화 자료형 (Abstract data type)
== 프로그래머 정의 데이터 유형 + sub-program
-사용자 정의 데이터 집합, 데이터 연산, 캡슐화
-매우 복잡한 데이터 : 외부 인터페이스 + 객체의 함수로 자세한 구현을 감춘다.
2.Generic mechanism
-일반화 함수 : 함수나 클래스를 추상화 -> 코딩에러를 줄이고 프로그램 크기를 줄임
-C++에서의 Template (c++에서의 일반화 Generic mechanism 표현 방법)
ex) template return-type func-name(parameter list) {}
3.Object oriented programming
-객체의 내부 상태 :variables, 객체의 행동 :function
= 변수 + 함수의 집합 ===> 객체를 만들기 위한 틀= class
-상속: 부모 클래스의 자료 구조와 연산 + 새로운 특징 -> 자식 클래스
-상속의 장점 :비용 절감, 코드 재사용, 복잡도 최소화
-단일 상속: 하나의 부모 클래스 / 다중 상속: 여러 개의 부모 클래스
-서브 클래스 (상속 클래스 )
ex) class B: public A {} -> A를 상속받는 B 클래스
-Simula = 최초의 객체지향 언어
-하향식 설계 : 하나의 큰 기능을 여러개의 작은 작업으로 나눔 -> 시스템 계층 구조도
-객체 지향 설계 : 여러 개의 모듈의 통합/관리/ 요구사항 변경에 대하여 유지보수가 용이함
-기능 중식 -> 데이터 중심
-코드 재사용 용이, 데이터와 연산을 함께 정의 , 정보 은닉
-데이터 캡슐화 : 정의된 연사나만을 내부 데이터를 접근할 수 있음
-다형성: 매개 변수에 따라 다르게 동작
-상속 : 자식 클래스는 부모 클래스의 속성과 연산을 공유
-생성자와 소멸자
-생성자 : constructor 객체 생성시 ex) stack(int size);
-소멸자: destructor 객체 소멸시 ex) ~stack(void);
-다형성
-정적 다형성: compile time에 판단 가능한 다형성
-동적 다형성: run time에 판단할 수 있는 다형성
-객체 지향 프로그래밍을 지원 == 동적 다형성을 지원
-가상 함수 : 실행 시간 함수 결정
-this pointer : 묵시적 매개변수로 함수를 호출하는 객체를 가리키는 포인터 (인자로 안 써준다.)
ex) void set(int x) { this -> x= x;}
-함수 중복 : 유사한 작업을 위해 같은 이름을 사용할 수 있음
-연산자 중복: 기존 연산자를 함수로 정의함
-템플릿 : 매개변수에 따라서 다양한 클래스와 함수를 생성
-가상함수(virtual function) -> 객체 지향의 중요한 특징!
-가상함수 : 기본 클래스에서 정의한 함수를 파생클래스에서 새버전으로 재정의하는 것
-기본 클래스 : 함수의 인터페이스 정의/ 파생 클래스 : 실제 함수의 몸체 정의
-Friend 함수
: 클래스의 private data를 접근할 수 있는 함수
+ friend 함수 대신 interface 함수를 선호할 것