티스토리 뷰
다형성
다형성
- 같은 메서드(멤버함수)가 다른 객체에서는 다르게 동작하는 것을 의미
- 동일한 인터페이스를 통해 서로 다른 구현 가능
- 코드의 유연성 및 확장성
다형성의 종류
- 다형성
- 같은 인터페이스를 통해, 여러가지 다른 형태의 객체를 다룰 수 있게 해주는 특성
- 오버로딩
- 함수이름은 동일하되 인자를 다르게하여 재정의
- 일반적으로 일반함수 생성에서도 많이 사용되는 기법
- 인자형태에 따라 다르게 함수 호출
오버로딩
class Player
{
void Test()
{
cout << "test" << endl;
}
};
class Archer : public Player
{
void Test(int hp) // Test() 오버로딩
{
_hp = hp;
cout << "test2" << endl;
}
};
- 오버라이딩
- 똑같은 함수이름과 동일한 인자형태를 가진 메서드가, 객체에 따라 다르게 동작
- 가상함수 사용 (virtual)
- c++11에서 도입된 override키워드를 통해, 가상 함수의 메서드가 다를시 에러를 내뱉음
- (즉, override는 virtual함수의 재정의 함수라는 것을 컴파일러에게 알리기 위해 사용)
- 연산자 오버로딩
- 다음 블로그 주제로...
- 순수 가상함수
virtual [반환타입] [가상함수이름]([인자]) = 0;
- > 순수 가상함수를 사용할 경우, 해당 클래스는 추상화클래스가 되어 인스턴스 생성이 불가능하다
#include <iostream>
using namespace std;
class Player
{
public:
Player()
{
}
virtual void VTest() = 0; // 순수 가상함수
virtual void VSpeek()
{
cout << "Player" << endl;
}
};
class Archer : public Player
{
public:
Archer()
{
_hp = 0;
_attack = 0;
}
void VTest() override // 필수
{
cout << "순수 가상함수 archer! " << endl;
}
void VSpeek() override // 재정의 키워드 추가 "override"
{
cout << "Archer" << endl;
}
public:
int _hp;
int _attack;
};
void VirtualTest(Player* player)
{
//player->VSpeek()를 호출했지만, Archer->VSpeek()함수가 호출됨
// player라는 같은 인터페이스 이용
player->VSpeek();
}
int main()
{
//Player p1; // 순수 가상함수가 있다는 것은 추상화 클래스 이므로, 인스턴스 사용 불가
Archer ar; // 순수 가상함수의 재정의는 필수값
VirtualTest(&ar);
}
'프로그래밍 언어 > C++' 카테고리의 다른 글
연산자 오버로딩 (+대입연산자, 전위/후위연산자 ) (0) | 2024.07.03 |
---|---|
클래스 초기화 (0) | 2024.07.03 |
객체 지향 프로그래밍 (+ 상속성, 은닉성) (0) | 2024.07.02 |
객체 지향 (+ 생성자, 소멸자) (0) | 2024.07.02 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Spring
- 예외처리
- BFS
- 알고리즘
- JSON
- SQL
- 깊이우선탐색
- 게시판
- 백준
- db
- 우선순위 큐
- stack
- DFS
- 포트폴리오
- 게시판 프로젝트
- Java
- 클래스
- Thymeleaf
- 버블정렬
- 검증
- HTML5
- 정렬
- 기술면접
- 티스토리챌린지
- 이진탐색
- 코딩테스트
- 오블완
- bean
- 타입변환
- JDBC
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함