회원 로그인
정보기억 정보기억에 체크할 경우 다음접속시 아이디와 패스워드를 입력하지 않으셔도 됩니다.
그러나, 개인PC가 아닐 경우 타인이 로그인할 수 있습니다.
PC를 여러사람이 사용하는 공공장소에서는 체크하지 마세요.
소셜네트워크 서비스를 통해서 로그인하시면 별도의 로그인 절차없이 회원서비스를 이용하실 수 있습니다.


최근 게시물

1.노션에서 작성 중

1.노션에서 작성 중

개편하기 전까지 노션에서 작성 중

2024.04.04//read more

2.ChatGPT

2.ChatGPT

OpenAI로 대규모 언어 모델대화형...

2023.03.16//read more

3.노코딩 게임 엔진 - 빌..

3.노코딩 게임 엔진 - 빌..

빌드 지원안드로이드iOS윈도우즈특이사...

2023.03.14//read more

4.(완료) 미접속 회원 정..

4.(완료) 미접속 회원 정..

[완료] 36명의 회원을 정리하였습니...

2023.02.16//read more

5.매뉴얼 플러스 - 전자제..



안정적인 DNS 서비스 DNSEver
DNS Powered by DNSEver.com


메소드 오버라이드

푸딩뱃살 | 2015.11.12 01:51 | 조회 1993
메소드 오버라이드
- 기반 클래스에서 상속 받은 메소드를 파생 클래스에서 재정의 해서 사용하는 것을 메소드 오버라이드라고 한다.
//  오버라이드
#include <iostream>

using namespace std;

class AAA {
public:
    void print() {
        cout << "AAA" << endl;
    }
};

class BBB : public AAA {
public:
    void print() {    // 오버라이드
        cout << "BBB" << endl;
    }
};

void main() {
    BBB b;
    b.print();
}

#include <iostream>
#include <stdlib.h>     /* srand, rand */
#include <time.h>       /* time */

using namespace std;

// 부모 클래스는 protected, public만 주로 사용
// C++ 다중 상속 가능, C#/Java 단일 상속
class CommonUnit1 {
protected:
    string _name;
    int _hp;
    int _damage;
public:
    CommonUnit1() { }

    CommonUnit1(string name, int damage) {
        _name = name;
        _damage = damage;
    }

    ~CommonUnit1() {}

    void Move() {
        cout << "[" << _name.c_str() << "] 님이 이동을 합니다. " << endl;
    }
    // 상속하고 있는 모든 클래스에서 사용
    void Attack() {
        cout << "[" << _name.c_str() << "] 님이 " << _damage
            << "만큼의 공격을 합니다. " << endl;
    }
    void Hit(int damage) {
        cout << "[" << _name.c_str() << "] 님이 " << damage
            << " 데미지를 입었습니다. " << endl;
    }
    void Die() {
        cout << "[" << _name.c_str() << "] 님이 사망했습니다. " << endl;
    }
};

class Player1 : public CommonUnit1 {
private:
    int _level;
    int _gravity;
    string _talkMessage;
public:
    Player1(string name, int damage, string talkMessage) : CommonUnit1(name, damage) {

        _talkMessage = talkMessage;

        cout << "[" << _name.c_str() << "] 님이 접속하였습니다." << endl;
        Talk();
    };

    ~Player1() {};

    void Talk() {
        cout << "[" << _name.c_str() << "] 메시지 : "
            << _talkMessage.c_str() << endl;
    }

    // 오버라이드
    // 부모 클래스에서 가지고 있는 Attack()을 호출 않하고 재정의
    // 같은 메소드명(같은 자료형 인수)
    void Attack() {
        cout << "[" << _name.c_str() << "] 님이 총을 쏘면서 피하면서 "
            << _damage << "만큼의 공격을 합니다. " << endl;
    }

    void Jump() {
        cout << "[" << _name.c_str() << "] 님이 점프를했습니다. " << endl;
    }
};

class Monster1 : public CommonUnit1 {
private:
    int _skillType;
public:

    Monster1(string name, int damage, int skillType) : CommonUnit1(name, damage) {
        _skillType = skillType;

        cout << "[" << _name.c_str() << "] 님이 나타났습니다." << endl;
    };
    ~Monster1() {};

    void Skill()
    {
        cout << "[" << _name.c_str() << "] 님이 " << _skillType
            << "타입의 스킬을 사용합니다. " << endl;
    }

};

class Creature1 : public CommonUnit1 {
private:
    int _time;
public:

    Creature1(string name, int damage, int time) : CommonUnit1(name, damage) {
        _time = time;

        cout << "[" << _name.c_str() << "] 님이 소환 됐습니다." << endl;
        Timer();
    };
    ~Creature1() {};

    // 오버라이드
    void Hit(int damage) {

        // 부모의 Hit 메소드를 호출
        CommonUnit1::Hit(damage);

        Attack(); // 크리쳐는 공격을 받으면 공격을 시도함
    }

    void Timer()
    {
        cout << "[" << _name.c_str() << "] 님이 "
            << _time << " 시간뒤에 소멸됩니다." << endl;
    }
};

class ExtendsStudy1 {
public:
    ExtendsStudy1() {
        Start();
    }

    void Start()
    {
        Player1* player = new Player1("티거", 30, "저는 푸우의 친구 티거입니다!!");
        player->Move();
        player->Attack();
        player->Hit(10);
        player->Die();
        delete player;

        Monster1* monster = new Monster1("오우거", 20, 2);
        monster->Move();
        monster->Attack();
        monster->Skill();
        monster->Hit(30);
        monster->Die();
        delete monster;

        Creature1* creature = new Creature1("멀록", 5, 10);
        creature->Move();
        creature->Hit(5);
        creature->Die();
        delete creature;
    }
};


void main()
{
    ExtendsStudy1* object = new ExtendsStudy1();
    delete object;
}
285개(7/15페이지)
프로그래밍
번호 제목 글쓴이 조회 날짜
165 [C#] 네임스페이스 (namespace) 푸딩뱃살 3406 2015.11.14 17:34
164 [C#] 인터페이스 (Interface) 첨부파일 푸딩뱃살 2196 2015.11.13 18:17
163 [C/C++] Static(정적) 멤버 변수, 메소드 푸딩뱃살 2475 2015.11.13 10:32
162 [C/C++] 추상 클래스 - 오버라이드 / 업/다운캐스팅(형변환) / virtual(가상함수) 푸딩뱃살 4727 2015.11.12 02:00
>> [C/C++] 메소드 오버라이드 푸딩뱃살 1994 2015.11.12 01:51
160 [C#] 상속 (with Unity) 푸딩뱃살 5455 2015.11.10 16:25
159 [C/C++] 클래스 상속 푸딩뱃살 2246 2015.11.10 14:08
158 [C/C++] 객체 활용 푸딩뱃살 2472 2015.11.09 21:28
157 [C#] C# 객체 클래스 푸딩뱃살 3569 2015.11.08 15:51
156 [C/C++] 생성자 / 소멸자 / 오버로드 푸딩뱃살 2205 2015.11.07 01:23
155 [C/C++] 클래스 선언/정의, 객체 생성 푸딩뱃살 3569 2015.11.06 14:05
154 [C/C++] 로또 프로그램 푸딩뱃살 2286 2015.11.06 12:00
153 [C/C++] 2차원 동적 객체 배열 활용 푸딩뱃살 3652 2015.11.06 00:47
152 [C/C++] 2차원 배열 푸딩뱃살 2404 2015.11.06 00:30
151 [C/C++] 2차원 포인터 푸딩뱃살 2053 2015.11.06 00:26
150 [C/C++] 동적할당 푸딩뱃살 1806 2015.11.05 11:23
149 [C/C++] 당신의 프로그래밍에 디버깅 더하기 : Visual C++ 디버깅 기초에서 고급까지 첨부파일 푸딩뱃살 1454 2015.11.05 11:20
148 [C/C++] 포인터와 배열의 이해 푸딩뱃살 2015 2015.11.04 23:54
147 [C/C++] 포인터 푸딩뱃살 2195 2015.11.04 15:14
146 [C/C++] 일반 함수와 메소드간의 차이 푸딩뱃살 2433 2015.11.03 23:38