1. 클래스 상속(객체지향 방법론)
- 객체와 메세지
- 클래스 : 붕어빵 틀
- 객체 : 붕어빵 실물 (메시지를 보내거나 받는 대리인(클래스에 의해서 만들어진 실물))
- 메세지(함수) → 윈도우 프로그래밍에서는 주로 이벤트이다.
- 즉, 객체가 처리해야할 일을 전달하는 것.(그냥 함수임)
- 정보은닉 : 실제 처리되는 과정과 내용이 숨겨져 있다.
정리)
- 클래스 : 프로그래머가 정의한 자료형
- 객체 : 클래스 타입으로 선언하여 메모리에 할당 된 것.
- 인터페이스 파일(헤더)
- 객체를 추상화한 파일
- 외부 사용자를 위한 파일
- 클래스, 메시지(가상함수)가 정의된 파일 - 참고로 변수는 없음.
- 외부사용자는 세부구현 내용을 몰라도 이 파일만 읽고 불러서 사용 가능.
- 구현 파일(소스 파일)
- 인터페이스 파일에 정의된 메시지(함수)를 구현한 파일
- 내부 구현자가 작성한 파일.
‘?’연산자
char m_rval;
string m_sval;
bool m_bOpen;
string getSval() {return m_bOpen ? m_sval : "None";}
대충 m_bOpen이 true이면 m_sval을 리턴, 아니면 “none”을 리턴.
간단한 카드 게임(근데 사실 게임도 아님)
//Card.h(inline)
#pragma once
#include <iostream>
#include <string>
using namespace std;
class Card {
private:
char m_rval;
string m_sval;
bool m_bOpen;
public:
Card(char r, string s) : m_rval(r), m_sval(s), m_bOpen(false) {};
~Card();
void flip() {m_bOpen = true;}
char getRval() {return m_bOpen ? m_rval : 'N';}
string getSval() {return m_bOpen ? m_sval : "None";}
void draw()
{
if(m_bOpen)
{
cout << "Number = " << m_rval << endl;
cout << "Shape = " << m_sval << endl;
}
else
{
cout << "Not open." << endl;
}
};
};
//main.cpp
#include "Card.h"
int main()
{
Card myCard('A', "Spade");
Card yourCard('5', "Heart");
myCard.flip();
cout << myCard.getRval() <<endl;
cout << yourCard.getRval() << endl;
yourCard.flip();
myCard.draw();
yourCard.draw();
return 0;
}
상속성
- 객체지향 프로그래밍에서 중요한 특성중 하나.
- 하위 클래스는 상위 클래스의 속성을 상속 받아서 별도의 선언 없이 사용 가능.
- 상위클래스의 구현 내용이 하위 클래스마다 다를경우
- 상위클래스에서는 선언만 하고, 실제 구현은 하위 클래스에서함.(virtual void 가상함수)
//main.cpp -> 대충 Shape이 부모고, Triangle과, Circle이 자식(평행)들이 있는 클래스가 있을때.
//포인터를 이용해서 아래 하위 객체들을 부륵 가능.
Shape* shape = new Triangle(2,6);
shape -> Draw(); // Shape의 하위 클래스인 트라이앵글 클래스의 가상함수를 가리켜서 출력 가능.
shape = new Circle(20);
shape -> Draw(); //마찬가지로 하위 클래스인 서클 클래스를 가리켜서 출력 가능.
//상위 클래스에 없고 하위 클래스에 없는 놈들은 부르지 못함)
cout << shape->getBase()//에러남.(get base는 자식인 Triangle에 있음.)
- 때문에 상위 클래스에서 가상함수로 만든 하위 클래스의 Draw 함수에서 하위 클래스에서 직접 만든
- GetBase를 호출 하거나, 하위 클래스가 직접 불러야함.
더블 포인터
BaseButton **buttons; //호출할떄 자식중에 뭐가 올지 모를때 일단 더블 포인터.
Motor *motor;
IceDispenser(BaseButton **b, Motor *m) : butttons(b), Motor(m)
다음주 배열 처리 방법 관련(포인터) 끝나고 나면 리스트 나간다고 합니당
반응형
'Game DevTip > STL' 카테고리의 다른 글
6. STL : 링크드 리스트(Linked List)를 직접 구현해 보자. (0) | 2024.12.07 |
---|---|
5. STL : 재귀함수에 대해서 (2) | 2024.12.07 |
4. STL : Call by value, Ref, Address & 배열과 포인터에 관련해서. (0) | 2024.12.07 |
2. STL : 추상화에 관해서. (0) | 2024.12.07 |
1. 자료구조 전 기초 상식(?) (0) | 2024.12.07 |
댓글