C++ (7)
Day 9
Polymorphism(다형성)
- Overloading
- 함수 중복
- 연산자 중복
- Default Parameter
- Overriding
- 함수 재정의
Function Overloading
- 다른 함수로 인식
- 함수의 이름 동일
- 함수의 매개변수 type, 개수 다름
- return type 무관
- 소멸자 불가 - 매개변수 X
- 모호하지 않게 선언
overloading.cpp
1 |
|
Output
1 | 3 |
Default Parameter
- 사전에 값을 선언한 함수의 매개변수
- 생략 가능
- 일반 매개변수 뒤에 존재
default_param.cpp
1 |
|
Output
1 |
|
myvec.cpp
1 |
|
Output
1 | Process finished with exit code 0 |
Static & Non-static
static
- 변수와 함수에 대한 기억 부류의 한 종류
- 생명 주기 : 프로그램이 시작될 때 생성, 프로그램 종료 시 소멸
- 사용 범위 : 선언된 범위, 접근 지정에 따름
- 전역 변수나 전역변수를 클래스에 캡슐화
- 전역 변수나 전역 함수를 가능한 사용하지 않도록
- 전역 변수나 전역 함수를
static
으로 선언하여 클래스 멤버로 선언
- 객체 사이에 공유 변수를 만들고자 할 때
static
멤버를 선언하여 모든 객체들이 공유
- 변수와 함수에 대한 기억 부류의 한 종류
- 클래스의 멤버
static
- 프로그램이 시작할 때 생성
- 클래스당 한번만 생성, 클래스 멤버라고 불림
- 클래스의 모든 인스턴스(객체)들이 공유하는 멤버
- non-
static
- 객체가 생성될 때 함께 생성
- 객체마다 객체 내에 생성
- 인스턴스 멤버라고 불림
person.cpp
1 |
|
Output
1 | 100 350 |
employee.cpp
1 |
|
Output
1 | 현재의 직원 수 : 3 |
circle.cpp
1 |
|
Output
1 | 할당된 원의 개수 : 10 |
Timeline of Program
- 프로그램 시작
- 전역 변수
static
멤버- 멤버 변수
- 멤버 함수
- 객체
- non-
static
멤버
- non-
- 객체 종료
- non-
static
멤버 종료
- non-
- 프로그램 끝
- 전역 변수 종료
static
멤버 종료
Access
static
멤버 함수 ->static
멤버 변수 : 가능static
멤버 함수 -> non-static
멤버 변수 : 불가능static
멤버 함수 -> non-static
멤버 함수 : 불가능- non-
static
멤버 함수 -> non-static
멤버 변수 : 가능 - non-
static
멤버 함수 ->static
멤버 변수 : 가능 - non-
static
멤버 함수 ->static
멤버 함수 : 가능 static
멤버 함수가 접근할 수 있는 것static
멤버 함수static
멤버 변수- 함수 내의 지역 변수
1 | this->sharedMoney += n; // static 이후 객체 생성 - 오류 |
Quiz
quiz.cpp
1 |
|
Output
1 | 1에서 100까지 랜덤한 정수 10개를 출력합니다. |
Day 10
Friend
- 클래스의 멤버 함수가 아닌 외부 함수
- 전역 함수
- 다른 클래스의 멤버 함수
friend
로 클래스 내에 선언된 함수- 클래스의 모든 멤버를 접근할 수 있는 권한 부여
- 프렌드 함수라고 부름
- friend
- 전역 함수
- 다른 클래스의 멤버 함수
- 다른 클래스 전체
friend1.cpp
1 |
|
friend2.cpp
1 |
|
friend3.cpp
1 |
|
Output
1 | not equal |
Operator Overloading
1 | 리턴타입 operator연산자(매개변수) |
C++
에 본래 있는 연산자만 중복 가능- 피 연산자 타입이 다른 새로운 연산 정의
- 연산자는 함수 형태로 구현 - 연산자 함수(Operator function)
- 클래스의 멤버 함수로 구현
- 외부 함수로 구현하고 클래스에 프렌드 함수로 선언
- 반드시 클래스와 관계를 가짐
- 피연산자의 개수를 바꿀 수 없음
- 연산의 우선 순위 변경 안됨
- 모든 연산자가 중복 가능하진 않음
power_by_member_function.cpp
1 |
|
power_by_friend_function.cpp
1 |
|
Output
1 | Kick = 3, Punch = 5 |
cpoint_by_member_function.cpp
1 |
|
cpoint_by_friend_function.cpp
1 |
|
Output
1 | (2,2) |
prefix_by_member_function.cpp
1 |
|
Output
1 |
postfix_by_friend_function.cpp
1 |
|
Output
1 | Kick = 3, Punch = 5 |
pre_post.cpp
1 |
|
Output
1 | Kick = 3, Punch = 5 |
complex.cpp
1 |
|
Output
1 | (1.1,2.1i) |
Quiz
quiz.cpp
1 |
|
Output
1 | 1 + 2i |
Day 11
Stack
stack.cpp
1 |
|
Output
1 | 5 4 3 2 1 |
Const Member & Const Object
const
member variable : 객체 생성과 동시에 초기화 필요- 멤버 초기화 구문 사용
const
member function : 멤버 변수의 값을 읽을 수 있으나 변경 불가능- 멤버 변수의 주소 반환 불가
- 비
const
멤버 함수의 호출 불가
const
object- 객체 생성 시
const
접두사 추가 - 멤버 변수의 값 변경 불가
const
멤버 함수 이외의 멤버 함수에 대한 호출 불가
- 객체 생성 시
Inheritance
- 기본 클래스(Base class) - 상속해주는 클래스, 부모 클래스
- 파생 클래스(Derived class) - 상속받는 클래스, 자식 클래스
1 | class Derived : public Base{ //public, private, protected |
- 간결한 클래스 작성
- 클래스 간의 계층적 분류 및 관리의 용이함
- 클래스 재사용과 확장을 통한 소프트웨어 생산성 향상
inheritance.cpp
1 |
|
Output
1 | Red : (3,4) |
Casting
- 업 캐스팅(Up-casting)
- 파생 클래스의 객체를 기본 클래스의 포인터로 가리키는 것
- 포인터 : 기본
- 객체 : 파생
- 다운 캐스팅(Down-casting)
- 기본 클래스 포인터가 가리키는 객체를 파생 클래스의 포인터로 가리키는 것
- 명시적 형변환 필요
- 포인터 : 파생
- 객체 : 기본
접근 지정자
- private 멤버
- 선언된 클래스 내에서만 접근 가능
- 파생 클래스에서도 기본 클래스의 private 멤버 직접 접근 불가
- public 멤버
- 선언된 클래스나 외부 어떤 클래스, 모든 외부 함수에 접근 허용
- 파생 클래스에서 기본 클래스의 public 멤버 접근 가능
- protected 멤버
- 선언된 클래스에서 접근 가능
- 파생 클래스에서만 접근 허용
point.cpp
1 |
|
Output
1 | BLACK색으로 (0,0)에 위치한 점입니다. |
Quiz
quiz.cpp
1 |
|
Output
1 | 큐의 사이즈를 입력하라>> 5 |