중복 - dongseokowon.dongseo.ac.kr/~dkkang/oop2008fall/w10.pdf · 2015-09-14 · 39 { 40 unit...

35
연산자 연산자 연산자 연산자 중복 중복 중복 중복 같은 연산자에 서로 다른 매개변수를 사용한 경우를 말한다.

Upload: others

Post on 08-Jul-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

  • 연산

    자연

    산자

    연산

    자연

    산자

    중복

    중복

    중복

    중복

    같은연산자에서로다른매개변수를사용한경우를말한다.

  • 이장

    에서

    다룰

    내용

    연산

    자중

    복1

    이항

    연산

    자중

    복2

    관계

    연산

    자중

    복3

    단항

    연산

    자중

    복4

    frie

    nd 함

    수를

    이용

    한연

    산자

    중복

    5

  • 01_연

    산자

    중복

    �연

    산자

    의중

    �같

    은연

    산자

    에서

    로다

    른매

    개변

    수를

    사용

    하여

    선택

    적으

    로연

    산을

    수행

    할수

    있게

    하는

    �함

    수중

    복의

    부분

    집합

    �포

    인터

    의기

    본형

    태와

    사용

    반환

    형클

    래스

    명::

    opera

    tor#

    (매개

    변수

    ){ 문

    장... re

    turn

    반환

    형;

    } [기본

    형태

    ]

    IntU

    nit

    Unit

    ::opera

    tor+

    (Unit

    rig

    ht)

    { Unit

    tem

    p;

    if (

    rig

    ht.hp >

    hp )

    tem

    p.h

    p =

    rig

    ht.hp;

    els

    ete

    mp.h

    p =

    hp;

    retu

    rn t

    em

    p;

    } [사용

    예]

  • 01_연

    산자

    중복

    �연

    산자

    의중

    복의

    제약

    �연

    산자

    의우

    선순

    위는

    변경

    될수

    없다

    .

    �연

    산자

    가취

    하는

    피연

    산자

    의개

    수는

    바뀔

    수없

    으며

    디폴

    트인

    자역

    시사

    용할

    수없

    다.

    �.,

    .*,

    ::,

    ?:과

    같은

    연산

    자는

    중복

    되지

    않는

    다.

    �=,

    [],

    (),

    ->와

    같은

    연산

    자들

    은클

    래스

    의멤

    버�

    =,

    [],

    (),

    ->와

    같은

    연산

    자들

    은클

    래스

    의멤

    버함

    수(정

    적멤

    버함

    수가

    아닌

    )로만

    정의

    할수

    있다

    .

  • 02_이

    항연

    산자

    중복

    �이

    항연

    산자

    의중

    �중

    복함

    수가

    한개

    의매

    개변

    수만

    가짐

    �연

    산자

    의우

    변에

    있는

    객체

    를받

    �연

    산자

    의좌

    변에

    있는

    객체

    는th

    is 포

    인터

    로전

    달됨

  • [기본

    예제

    10-2]

    이항

    연산

    자중

    복-

    1

    01 #

    inclu

    de<io

    stream

    >02 u

    sin

    g n

    am

    espace s

    td;

    03 c

    lass U

    nit

    04 {

    05

    06 p

    riva

    te:

    07 int hp;

    08

    09 p

    ublic

    :10 U

    nit()

    11 {

    12 h

    p=0;

    13 }

    13 }

    14

    15 U

    nit(int i)

    16 {

    17 h

    p=i;

    18 }

    19

    20 int G

    etH

    P()

    21 {

    22 retu

    rn h

    p;

    23 }

    24

    25 U

    nit o

    pera

    tor+

    (Unit rig

    ht)

    ;26

    27 }

    ;

    연산

    자연

    산자

    연산

    자연

    산자

    중복

    을중

    복을

    중복

    을중

    복을

    위해

    위해

    위해

    위해

    연산

    자연

    산자

    연산

    자연

    산자

    함수

    를함

    수를

    함수

    를함

    수를

    정의

    한다

    정의

    한다

    정의

    한다

    정의

    한다

    . ...

  • [기본

    예제

    10-2]

    이항

    연산

    자중

    복-

    2

    28

    29 U

    nit U

    nit::opera

    tor+

    (Unit rig

    ht)

    30 {

    31 U

    nit tem

    p;

    32

    33 if

    ( right.hp >

    hp )

    34 tem

    p.h

    p =

    rig

    ht.hp;

    35 e

    lse

    36 tem

    p.h

    p =

    hp;

    37

    38 retu

    rn tem

    p;

    39 }

    40

    연산

    자연

    산자

    연산

    자연

    산자

    함수

    를함

    수를

    함수

    를함

    수를

    구현

    한다

    구현

    한다

    구현

    한다

    구현

    한다

    . ...

    this

    th

    is

    this

    th

    is 객

    체와

    객체

    와객

    체와

    객체

    와매

    개변

    수로

    매개

    변수

    로매

    개변

    수로

    매개

    변수

    로넘

    어오

    는넘

    어오

    는넘

    어오

    는넘

    어오

    는객

    체객

    체객

    체객

    체중 중중중

    큰 큰큰큰값

    을값

    을값

    을값

    을th

    is

    this

    th

    is

    this

    객체

    의객

    체의

    객체

    의객

    체의

    hp

    hp

    hp

    hp로 로로로

    저장

    한다

    저장

    한다

    저장

    한다

    저장

    한다

    .

    40

    41 int m

    ain

    (int arg

    c,

    char*

    arg

    v[ ]

    )42 {

    43 U

    nit U

    nit1(1

    0),

    Unit2(5

    ), U

    nit3;

    44

    45 U

    nit3 =

    Unit1 +

    Unit2;

    46

    47 c

    out << "

    Unit1 h

    p =

    " <

    < U

    nit1.G

    etH

    P()

    << "

    \n";

    48 c

    out << "

    Unit2 h

    p =

    " <

    < U

    nit2.G

    etH

    P()

    << "

    \n";

    49 c

    out << "

    Unit3 h

    p =

    " <

    < U

    nit3.G

    etH

    P()

    << "

    \n";

    50

    51 retu

    rn 0

    ;52 }

    우리

    가우

    리가

    우리

    가우

    리가

    알고

    알고

    알고

    알고

    있는

    있는

    있는

    있는

    + +++의 의의의

    의미

    와의

    미와

    의미

    와의

    미와

    다른

    다른

    다른

    다른

    의미

    의의

    미의

    의미

    의의

    미의

    연산

    자다

    연산

    자다

    연산

    자다

    연산

    자다

    . ...

  • [기본

    예제

    10-3]

    이항

    연산

    자를

    적용

    한예

    제-

    1

    01 #

    inclu

    de<io

    stream

    >02 #

    inclu

    de<cstrin

    g>

    03 u

    sin

    g n

    am

    espace s

    td;

    04 c

    lass U

    nit

    05 {

    06

    07 p

    riva

    te:

    08 inthp;

    09 intm

    p;

    10 intunitSiz

    e;

    10 intunitSiz

    e;

    11 c

    har*

    nam

    e;

    12

    13 p

    ublic

    :14 U

    nit()

    15 {

    16 h

    p =

    0;

    17 m

    p =

    0;

    18 u

    nitSiz

    e= 0

    ;19 n

    am

    e =

    NU

    LL;

    20 }

    21

    Unit

    Unit

    Unit

    Unit 생

    성자

    에서

    생성

    자에

    서생

    성자

    에서

    생성

    자에

    서필

    요한

    필요

    한필

    요한

    필요

    한초

    기화

    초기

    화초

    기화

    초기

    화작

    업을

    작업

    을작

    업을

    작업

    을한

    다한

    다한

    다한

    다. ...

  • [기본

    예제

    10-3]

    이항

    연산

    자를

    적용

    한예

    제-

    2

    22 U

    nit(int arg

    Hp,

    int arg

    Mp,

    int arg

    Siz

    e,

    const char*

    arg

    Nam

    e)

    23 :

    hp(a

    rgH

    p),

    mp(a

    rgM

    p),

    unitSiz

    e(a

    rgSiz

    e)

    24 {

    25

    nam

    e =

    new

    char[

    strle

    n(a

    rgN

    am

    e)

    + 1

    ];26

    strcpy(

    nam

    e,

    arg

    Nam

    e);

    27 }

    ;28

    29 ~

    Unit()

    30 {

    31

    if (

    !nam

    e)

    생성

    자에

    생성

    자에

    생성

    자에

    생성

    자에

    할당

    한할

    당한

    할당

    한할

    당한

    메모

    리는

    메모

    리는

    메모

    리는

    메모

    리는

    반드

    시반

    드시

    반드

    시반

    드시

    해제

    해야

    해제

    해야

    해제

    해야

    해제

    해야

    한다

    한다

    한다

    한다

    . ...

    31

    if (

    !nam

    e)

    32

    {33

    dele

    te[

    ] nam

    e;

    34

    nam

    e =

    NU

    LL;

    35

    }36 }

    ;37

    38 p

    ublic

    :39

    int G

    etH

    P()

    40

    {41

    retu

    rn h

    p;

    42

    }

  • [기본

    예제

    10-3]

    이항

    연산

    자를

    적용

    한예

    제-

    3

    43

    44 int G

    etM

    P()

    45 {

    46 r

    etu

    rn m

    p;

    47 }

    48

    49 int G

    etS

    ize()

    50 {

    51 r

    etu

    rn u

    nitSiz

    e;

    51 r

    etu

    rn u

    nitSiz

    e;

    52 }

    53

    54 c

    har*

    GetN

    am

    e()

    55 {

    56 r

    etu

    rn n

    am

    e;

    57 }

    58

    59 int opera

    tor+

    (Unit rig

    ht)

    ;60 }

    ;연

    산자

    연산

    자연

    산자

    연산

    자중

    복을

    중복

    을중

    복을

    중복

    을위

    한위

    한위

    한위

    한함

    수다

    함수

    다함

    수다

    함수

    다. ...

  • [기본

    예제

    10-3]

    이항

    연산

    자를

    적용

    한예

    제-

    4

    61

    62 int U

    nit::

    opera

    tor+

    (Unit rig

    ht)

    63 {

    64 retu

    rn G

    etS

    ize()

    + rig

    ht.G

    etS

    ize()

    ;65 }

    ;66

    67 c

    lass H

    ighTem

    pla

    r : public

    Unit

    68 {

    69

    70 p

    ublic

    :71 H

    ighTem

    pla

    r()

    연산

    자를

    연산

    자를

    연산

    자를

    연산

    자를

    중복

    으로

    중복

    으로

    중복

    으로

    중복

    으로

    구현

    한다

    구현

    한다

    구현

    한다

    구현

    한다

    . ...

    72 : U

    nit(4

    5, 125, 2, "H

    ighTem

    pla

    r")

    73 {

    };74 }

    ;75

    76 int m

    ain

    (int arg

    c, char*

    arg

    v[ ]

    )77 {

    78 H

    ighTem

    pla

    r hTem

    pla

    r1, hTem

    pla

    r2;

    79

    80 c

    out << "

    Tota

    l U

    nit s

    ize :

    " <

    < h

    Tem

    pla

    r1 +

    hTem

    pla

    r2 <

    < "

    \n";

    81

    82 retu

    rn 0

    ;83 }

    객체

    끼리

    객체

    끼리

    객체

    끼리

    객체

    끼리

    직접

    직접

    직접

    직접

    더하

    는더

    하는

    더하

    는더

    하는

    연산

    을연

    산을

    연산

    을연

    산을

    하는

    하는

    하는

    하는

    +

    +

    +

    + 연

    산자

    다연

    산자

    다연

    산자

    다연

    산자

    다. ...

  • 03_관

    계연

    산자

    중복

    / 04_단

    항연

    산자

    중복

    �관

    계연

    산자

    의중

    �관

    계연

    산자

    와논

    리연

    산자

    도중

    복이

    가능

    �참

    /거짓

    을나

    타내

    는변

    수를

    반환

    �연

    산자

    들이

    다른

    자료

    형과

    함께

    큰관

    계식

    에포

    함될

    수있

    기때

    �단

    항연

    산자

    중복

    �하

    나의

    피연

    산자

    만다

    �중

    복함

    수의

    매개

    변수

    가없

  • [기본

    예제

    10-4]

    관계

    연산

    자의

    중복

    -1

    01 #

    inclu

    de<io

    stream

    >02 u

    sin

    g n

    am

    espace s

    td;

    03 c

    lass U

    nit

    04 {

    05

    06 p

    riva

    te:

    07

    int hp;

    08

    09 p

    ublic

    :10

    Unit()

    기본

    기본

    기본

    기본

    클래

    스클

    래스

    클래

    스클

    래스

    Unit

    Unit

    Unit

    Unit을 을을을

    정의

    정의

    정의

    정의

    한다

    한다

    한다

    한다

    . ...

    10

    Unit()

    11

    {12

    hp=0;

    13

    }14

    15 U

    nit(int i)

    16

    {17

    hp=i;

    18

    }19

    20 int G

    etH

    P()

    21 {

  • [기본

    예제

    10-4]

    관계

    연산

    자의

    중복

    -2

    22 r

    etu

    rn h

    p;

    23 }

    24

    25 int opera

    tor=

    =(U

    nit r

    ight)

    ;26

    27 }

    ;28

    29 int U

    nit::opera

    tor=

    =(U

    nit r

    ight)

    30 {

    31

    관계

    관계

    관계

    관계

    연산

    자연

    산자

    연산

    자연

    산자

    중복

    을중

    복을

    중복

    을중

    복을

    위한

    위한

    위한

    위한

    연산

    자연

    산자

    연산

    자연

    산자

    함수

    다함

    수다

    함수

    다함

    수다

    . ...

    31

    32 if

    ( hp =

    = r

    ight.G

    etH

    P()

    )33 r

    etu

    rn 1

    ;34 e

    lse

    35 r

    etu

    rn 0

    ;36 }

    37

    38 int m

    ain

    (int arg

    c,

    char*

    arg

    v[ ]

    )39 {

    40 U

    nit U

    nit1(1

    0),

    Unit2(5

    ), U

    nit3(5

    );41

    매개

    변수

    매개

    변수

    매개

    변수

    매개

    변수

    객체

    의객

    체의

    객체

    의객

    체의

    hp

    hp

    hp

    hp와 와와와

    현 현현현객

    체의

    객체

    의객

    체의

    객체

    의hp

    hp

    hp

    hp가 가가가

    같으

    면같

    으면

    같으

    면같

    으면

    1(t

    rue)

    1(t

    rue)

    1(t

    rue)

    1(t

    rue)을 을을을

    , , , , 다

    르면

    다르

    면다

    르면

    다르

    면0(f

    als

    e)

    0(f

    als

    e)

    0(f

    als

    e)

    0(f

    als

    e)을 을을을

    리턴

    한다

    리턴

    한다

    리턴

    한다

    리턴

    한다

    . ...

  • [기본

    예제

    10-4]

    관계

    연산

    자의

    중복

    -3

    42 if

    ( U

    nit1 =

    = U

    nit2 )

    43

    cout << "

    Unit1 =

    = U

    nit2\

    n";

    44 e

    lse

    45

    cout << "

    Unit1 != U

    nit2\

    n";

    46

    47 if

    ( U

    nit2 =

    = U

    nit3 )

    48

    cout << "

    Unit2 =

    = U

    nit3\

    n";

    객체

    간의

    객체

    간의

    객체

    간의

    객체

    간의

    크기

    크기

    크기

    크기

    비교

    가비

    교가

    비교

    가비

    교가

    가능

    하다

    가능

    하다

    가능

    하다

    가능

    하다

    . ...

    48

    cout << "

    Unit2 =

    = U

    nit3\

    n";

    49 e

    lse

    50

    cout << "

    Unit2 != U

    nit3\

    n";

    51

    52 retu

    rn 0

    ;

    53 }

  • [기본

    예제

    10-5]

    단항

    연산

    자의

    중복

    -1

    01 #

    inclu

    de<io

    stream

    >02 u

    sin

    g n

    am

    espace s

    td;

    03 c

    lass U

    nit

    04 {

    05

    06 p

    riva

    te:

    07

    int hp;

    08

    09 p

    ublic

    :10

    Unit()

    11

    {

    기본

    기본

    기본

    기본

    클래

    스클

    래스

    클래

    스클

    래스

    Unit

    Unit

    Unit

    Unit을 을을을

    정의

    정의

    정의

    정의

    한다

    한다

    한다

    한다

    . ...

    12

    hp=0;

    13

    }14

    15

    Unit(int i)

    16

    {17

    hp=i;

    18

    }19

    20

    int G

    etH

    P()

    21

    {22

    retu

    rn h

    p;

    23

    }

  • [기본

    예제

    10-5]

    단항

    연산

    자의

    중복

    -1

    24

    25 U

    nit&

    opera

    tor+

    +()

    ;26

    27 }

    ;28

    29 U

    nit&

    Unit::opera

    tor+

    +()

    30 {

    31

    32 h

    p++;

    33

    34 retu

    rn (

    *this

    );35 }

    36

    단항

    단항

    단항

    단항

    연산

    자연

    산자

    연산

    자연

    산자

    연산

    의연

    산의

    연산

    의연

    산의

    중복

    중복

    중복

    중복

    함수

    이므

    로함

    수이

    므로

    함수

    이므

    로함

    수이

    므로

    매개

    변수

    가매

    개변

    수가

    매개

    변수

    가매

    개변

    수가

    없다

    없다

    없다

    없다

    . ...

    this

    th

    is

    this

    th

    is 객

    체를

    객체

    를객

    체를

    객체

    를대

    상으

    로대

    상으

    로대

    상으

    로대

    상으

    로하

    는하

    는하

    는하

    는것

    이기

    것이

    기것

    이기

    것이

    기때

    문에

    때문

    에때

    문에

    때문

    에결

    과로

    결과

    로결

    과로

    결과

    로th

    is

    this

    th

    is

    this

    객체

    를객

    체를

    객체

    를객

    체를

    반환

    한다

    반환

    한다

    반환

    한다

    반환

    한다

    . ...

    36

    37 int m

    ain

    (int arg

    c,

    char*

    arg

    v[ ]

    )38 {

    39 U

    nit U

    nit1(1

    );40

    41 c

    out << "

    Unit1 h

    p =

    " <

    < U

    nit1.G

    etH

    P()

    << "

    \n";

    42

    43 +

    +U

    nit1;

    44

    45 c

    out << "

    ++U

    nit1 h

    p =

    " <

    < U

    nit1.G

    etH

    P()

    << "

    \n";

    46

    47 retu

    rn 0

    ;48 }

  • 05_f

    riend 함

    수를

    이용

    한연

    산자

    중복

    �그

    외의

    연산

    자의

    중복

    �멤

    버함

    수이

    외의

    함수

    로도

    중복

    구현

    가능

    �fr

    iend 함

    수를

    이용

    �두

    개의

    피연

    산자

    를모

    두매

    개변

    수로

    전달

    �단

    항일

    경우

    하나

    의매

    개변

    수전

    ��치

    환연

    산자

    의중

    복은

    불가

  • [기본

    예제

    10-6]

    frie

    nd 함

    수를

    이용

    한연

    산자

    의중

    복-

    1

    01 #

    inclu

    de<io

    stream

    >02 u

    sin

    g n

    am

    espace s

    td;

    03 c

    lass U

    nit

    04 {

    05

    06 p

    riva

    te:

    07

    int hp;

    08

    09 p

    ublic

    :10

    Unit()

    11

    {

    기본

    기본

    기본

    기본

    클래

    스클

    래스

    클래

    스클

    래스

    Unit

    Unit

    Unit

    Unit을 을을을

    정의

    정의

    정의

    정의

    한다

    한다

    한다

    한다

    . ...

    12

    hp=0;

    13

    }14

    15

    Unit(int i)

    16

    {17

    hp=i;

    18

    }19

    20

    int G

    etH

    P()

    21

    {22

    retu

    rn h

    p;

    23

    }

  • [기본

    예제

    10-6]

    frie

    nd 함

    수를

    이용

    한연

    산자

    의중

    복-

    2

    25 f

    riend U

    nit o

    pera

    tor+

    (Unit left, U

    nit r

    ight)

    ;26

    27

    28 }

    ;29

    30 U

    nit o

    pera

    tor+

    (Unit left, U

    nit r

    ight)

    31 {

    32 U

    nit tem

    p;

    33 tem

    p.h

    p =

    left.h

    p +

    rig

    ht.hp;

    34

    35 c

    out << "

    left h

    p =

    " <

    < left.h

    p <

    < "

    \n";

    36 c

    out << "

    right hp =

    " <

    < rig

    ht.hp <

    < "

    \n";

    37 c

    out << "

    result h

    p =

    " <

    < tem

    p.h

    p <

    < "

    \n";

    frie

    nd

    frie

    nd

    frie

    nd

    frie

    nd 함

    수를

    함수

    를함

    수를

    함수

    를선

    언한

    다선

    언한

    다선

    언한

    다선

    언한

    다. . . . 즉 즉즉즉

    , , , , 다

    른다

    른다

    른다

    른객

    체에

    서객

    체에

    서객

    체에

    서객

    체에

    서이 이이이

    함수

    로함

    수로

    함수

    로함

    수로

    접근

    할접

    근할

    접근

    할접

    근할

    수 수수수있

    다는

    있다

    는있

    다는

    있다

    는의

    미다

    의미

    다의

    미다

    의미

    다. ...

    따라

    서따

    라서

    따라

    서따

    라서

    두 두두두개

    의개

    의개

    의개

    의매

    개변

    수를

    매개

    변수

    를매

    개변

    수를

    매개

    변수

    를받

    아서

    받아

    서받

    아서

    받아

    서연

    산을

    연산

    을연

    산을

    연산

    을수

    행한

    다수

    행한

    다수

    행한

    다수

    행한

    다. ...

    37 c

    out << "

    result h

    p =

    " <

    < tem

    p.h

    p <

    < "

    \n";

    38

    39 retu

    rn tem

    p;

    40 }

    41

    42 int m

    ain

    (int arg

    c,

    char*

    arg

    v[ ]

    )43 {

    44 U

    nit U

    nit1(1

    ), U

    nit2(5

    ), U

    nit3;

    45

    46 U

    nit3 =

    Unit1 +

    Unit2;

    47

    48 retu

    rn 0

    ;49 }

    tem

    pte

    mp

    tem

    pte

    mp가 가가가

    로컬

    로컬

    로컬

    로컬

    변수

    므로

    변수

    므로

    변수

    므로

    변수

    므로

    복사

    된복

    사된

    복사

    된복

    사된

    객체

    를객

    체를

    객체

    를객

    체를

    리턴

    한다

    리턴

    한다

    리턴

    한다

    리턴

    한다

    . ...

  • [기본

    예제

    10-7]

    치환

    연산

    자의

    중복

    -1

    01 #

    inclu

    de <

    iostream

    >02 #

    inclu

    de <

    cstrin

    g>

    03 u

    sin

    g n

    am

    espace s

    td;

    04 #

    define M

    AX_L

    EN

    255

    05

    06 c

    lass U

    nit

    07 {

    08

    09 p

    riva

    te:

    10

    char *p

    szN

    am

    e;

    11

    12 p

    ublic

    :13

    Unit()

    13

    Unit()

    14

    {15

    pszN

    am

    e= n

    ew

    char[

    MAX_L

    EN

    ];16

    cout<< "

    Norm

    al C

    onstructo

    r\n";

    17

    }18

    19

    ~U

    nit()

    20

    {21

    if (

    !pszN

    am

    e)

    22

    {23

    dele

    te [

    ] p

    szN

    am

    e;

    24

    pszN

    am

    e= N

    ULL;

    25

    }26

    }

    이름

    을이

    름을

    이름

    을이

    름을

    저장

    할저

    장할

    저장

    할저

    장할

    255

    255

    255

    255자

    의자

    의자

    의자

    의문

    자열

    문자

    열문

    자열

    문자

    열변

    수를

    변수

    를변

    수를

    변수

    를할

    당한

    다할

    당한

    다할

    당한

    다할

    당한

    다. ...

    생성

    자에

    서생

    성자

    에서

    생성

    자에

    서생

    성자

    에서

    할당

    한할

    당한

    할당

    한할

    당한

    변수

    가변

    수가

    변수

    가변

    수가

    여러

    여러

    여러

    여러

    번 번번번해

    제해

    제해

    제해

    제되

    지되

    지되

    지되

    지않

    도록

    않도

    록않

    도록

    않도

    록한

    다한

    다한

    다한

    다. ...

  • [기본

    예제

    10-7]

    치환

    연산

    자의

    중복

    -2

    27

    28 v

    oid

    Print(

    )29 {

    30 c

    out << p

    szN

    am

    e <

    < "

    \n";

    31 }

    32

    33 v

    oid

    Set(

    char*

    pszI

    n)

    34 {

    35 s

    trcpy(

    pszN

    am

    e,

    pszI

    n )

    ;36 }

    이름

    을이

    름을

    이름

    을이

    름을

    저장

    한다

    저장

    한다

    저장

    한다

    저장

    한다

    . ...

    36 }

    37

    38 U

    nit &

    opera

    tor=

    (Unit &

    right)

    ;39

    40 }

    ;41

    42 U

    nit &

    Unit::opera

    tor=

    (Unit &

    right)

    43 {

    44 c

    out << "

    opera

    tor

    calle

    d"

    << '\

    n';

    45 s

    trcpy(

    pszN

    am

    e,

    right.pszN

    am

    e )

    ;46 r

    etu

    rn *

    this

    ;47 }

    치환

    치환

    치환

    치환

    연산

    자를

    연산

    자를

    연산

    자를

    연산

    자를

    위한

    위한

    위한

    위한

    연산

    자연

    산자

    연산

    자연

    산자

    함수

    다함

    수다

    함수

    다함

    수다

    . ...

    호출

    호출

    호출

    호출

    여부

    를여

    부를

    여부

    를여

    부를

    확인

    한다

    확인

    한다

    확인

    한다

    확인

    한다

    . ...

    이름

    을이

    름을

    이름

    을이

    름을

    저장

    한다

    저장

    한다

    저장

    한다

    저장

    한다

    . ...

  • [기본

    예제

    10-7]

    치환

    연산

    자의

    중복

    -3

    48

    49 int m

    ain

    (int arg

    c, char*

    arg

    v[ ]

    )

    50 {

    51 U

    nit Z

    erg

    , Spaw

    n;

    52

    53 Z

    erg

    .Set(

    "zerg

    ling")

    ;

    54 Z

    erg

    .Print(

    );54 Z

    erg

    .Print(

    );

    55

    56 S

    paw

    n=Zerg

    ;

    57 S

    paw

    n.P

    rint(

    );

    58

    59 retu

    rn 0

    ;

    60 }

    연산

    자연

    산자

    연산

    자연

    산자

    중복

    중복

    중복

    중복

    함수

    가함

    수가

    함수

    가함

    수가

    호출

    된다

    호출

    된다

    호출

    된다

    호출

    된다

    . ...

  • 예제

    모음

    _1스

    트림

    출력

    연산

    자‘<

    <‘의

    중복

    사용

    요구

    사항

    요구

    사항

    요구

    사항

    요구

    사항

    ①학

    생번

    호를

    가지

    고있

    는Stu

    dent 클

    래스

    를설

    계한

    다.

    ②10번

    을가

    지는

    학생

    객체

    를하

    나생

    성한

    다.

    ③추

    가함

    수의

    구현

    없이

    연산

    자중

    복을

    이용

    해아

    래와

    같이

    번호

    를출

    력한

    다.

    실행

    결과

    실행

    결과

    실행

    결과

    실행

    결과

  • 예제

    모음

    _1소

    스-

    1

    01 #include<iostream>

    02 using namespace std;

    03 class Student

    04 {

    05 private:

    06 int m_StudentID;

    07

    08 public:

    09 Student(int agID)

    10 :m_StudentID(agID)

    11 {};

    12

    13 friend ostream& operator<<(ostream & os, Student & stu);

    cout

    cout

    cout

    cout의 의의의

    <<

    <<

    <<

    << 연

    산자

    를연

    산자

    를연

    산자

    를연

    산자

    를중

    복한

    다중

    복한

    다중

    복한

    다중

    복한

    다. ...

    13 friend ostream& operator<<(ostream & os, Student & stu);

    14 };

    15

    16 ostream& operator<<(ostream & os, Student & stu)

    17 {

    18 os << "StudentID = " << stu.m

    _StudentID;

    19 return os;

    20 }

    21

    22 void main()

    23 {

    24 Student stu(10);

    25

    26 cout << stu << '\n';

    27 }

    다른

    다른

    다른

    다른

    출력

    출력

    출력

    출력

    함수

    를함

    수를

    함수

    를함

    수를

    사용

    하지

    사용

    하지

    사용

    하지

    사용

    하지

    않는

    다않

    는다

    않는

    다않

    는다

    . ...

  • 예제

    모음

    _2

    교집

    합,

    합집

    합을

    구해

    주는

    새로

    운연

    산자

    요구

    사항

    요구

    사항

    요구

    사항

    요구

    사항

    ①A

    , B

    는집

    합(s

    et)

    이다

    .②

    교집

    합을

    구하

    는연

    산자

    ‘^’를

    정의

    하라

    .③

    합집

    합을

    구하

    는연

    산자

    ‘*’를

    정의

    하라

    .

    실행

    결과

    실행

    결과

    실행

    결과

    실행

    결과

  • 예제

    모음

    _2소

    스-

    1

    001 #

    inclu

    de<io

    stream

    >002 u

    sin

    g n

    am

    espace s

    td;

    003 c

    lass M

    ySet

    004 {

    005

    006 p

    riva

    te:

    007 int*

    m_S

    et;

    008 int m

    _Siz

    e;

    009 int m

    _MaxS

    ize;

    010

    011 p

    ublic

    :

    행 행행행순

    서대

    로순

    서대

    로순

    서대

    로순

    서대

    로집

    합의

    집합

    의집

    합의

    집합

    의내

    용을

    내용

    을내

    용을

    내용

    을저

    장할

    저장

    할저

    장할

    저장

    할변

    수변

    수변

    수변

    수, , , , 현

    재현

    재현

    재현

    재저

    장되

    어저

    장되

    어저

    장되

    어저

    장되

    어있

    는있

    는있

    는있

    는숫

    자의

    숫자

    의숫

    자의

    숫자

    의개

    수개

    수개

    수개

    수, , , ,

    현재

    현재

    현재

    현재

    집합

    집합

    집합

    집합

    저장

    소의

    저장

    소의

    저장

    소의

    저장

    소의

    최대

    최대

    최대

    최대

    크기

    다크

    기다

    크기

    다크

    기다

    . ...

    012

    013 M

    ySet(

    )014 {

    015 m

    _Siz

    e =

    0;

    016 m

    _MaxS

    ize =

    100;

    017 m

    _Set = n

    ew

    int[

    m_M

    axS

    ize];

    018 }

    ;019

    020 M

    ySet(

    int agSiz

    e)

    021 {

    022 m

    _Siz

    e =

    0;

    023 m

    _MaxS

    ize =

    agSiz

    e;

    024 m

    _Set = n

    ew

    int[

    m_M

    axS

    ize];

    기본

    기본

    기본

    기본

    생성

    자다

    생성

    자다

    생성

    자다

    생성

    자다

    . ...

    원하

    는원

    하는

    원하

    는원

    하는

    크기

    의크

    기의

    크기

    의크

    기의

    집합

    을집

    합을

    집합

    을집

    합을

    만든

    다만

    든다

    만든

    다만

    든다

    . ...

  • 예제

    모음

    _2소

    스-

    2

    025 }

    ;026

    027 M

    ySet(

    int*

    agSet, int agSiz

    e)

    028 {

    029 int i = 0

    ;030

    031 m

    _Siz

    e =

    0;

    032 m

    _MaxS

    ize =

    100;

    033 m

    _Set = n

    ew

    int[

    m_M

    axS

    ize];

    034

    035 f

    or(

    i = 0

    ; i < a

    gSiz

    e; i+

    +)

    036 m

    _Set[

    i] =

    agSet[

    i];

    037

    생성

    할생

    성할

    생성

    할생

    성할

    때 때때때초

    기화

    하기

    초기

    화하

    기초

    기화

    하기

    초기

    화하

    기위

    한위

    한위

    한위

    한생

    성자

    다생

    성자

    다생

    성자

    다생

    성자

    다. ...

    037

    038 m

    _Siz

    e =

    agSiz

    e;

    039 }

    ;040

    041 ~

    MyS

    et(

    )042 {

    043 if

    (!m

    _Set)

    044 {

    045 d

    ele

    te[

    ] m

    _Set;

    046 m

    _Set = N

    ULL;

    047 }

    048 }

    049

    소멸

    자소

    멸자

    소멸

    자소

    멸자

  • 예제

    모음

    _2소

    스-

    3

    050 p

    ublic

    :

    051 int G

    etS

    ize()

    052 {

    053 r

    etu

    rn m

    _Siz

    e;

    054 }

    055

    056 int G

    etIte

    m(int

    agIn

    dex)

    057 {

    원하

    는원

    하는

    원하

    는원

    하는

    위치

    의위

    치의

    위치

    의위

    치의

    원소

    를원

    소를

    원소

    를원

    소를

    읽어

    온다

    읽어

    온다

    읽어

    온다

    읽어

    온다

    . ...

    057 {

    058 r

    etu

    rn m

    _Set[

    agIn

    dex]

    ;

    059 }

    060

    061 v

    oid

    AddItem

    (int agValu

    e)

    062 {

    063 if

    (m_S

    ize <

    m_M

    axS

    ize)

    064 m

    _Set[

    m_S

    ize++]

    = a

    gValu

    e;

    065 }

    066

    현재

    현재

    현재

    현재

    저장

    되어

    저장

    되어

    저장

    되어

    저장

    되어

    있는

    있는

    있는

    있는

    숫자

    의숫

    자의

    숫자

    의숫

    자의

    가장

    가장

    가장

    가장

    뒤에

    뒤에

    뒤에

    뒤에

    새로

    운새

    로운

    새로

    운새

    로운

    숫자

    를숫

    자를

    숫자

    를숫

    자를

    입력

    입력

    입력

    입력

  • 예제

    모음

    _2소

    스-

    4

    067 v

    oid

    Print(

    )

    068 {

    069 c

    out << "

    { ";

    070 f

    or(

    int

    i = 0

    ; i < m

    _Siz

    e -

    1;

    i++)

    071 {

    072 c

    out << m

    _Set[

    i] <

    < "

    , ";

    073 }

    074 c

    out << m

    _Set[

    i] <

    < "

    }\

    n";

    075 }

    현재

    현재

    현재

    현재

    저장

    되어

    저장

    되어

    저장

    되어

    저장

    되어

    있는

    있는

    있는

    있는

    집합

    을집

    합을

    집합

    을집

    합을

    보여

    준다

    보여

    준다

    보여

    준다

    보여

    준다

    . ...

    075 }

    076

    077 M

    ySet opera

    tor^

    (MyS

    et

    right)

    ;

    078 M

    ySet opera

    tor*

    (MyS

    et

    right)

    ;

    079

    080 }

    ;

    081

    082 M

    ySet M

    ySet::o

    pera

    tor^

    (MyS

    et

    right)

    083 {

    084 M

    ySet tm

    pSet;

    085

    교집

    합과

    교집

    합과

    교집

    합과

    교집

    합과

    합집

    합합

    집합

    합집

    합합

    집합

    연산

    을연

    산을

    연산

    을연

    산을

    위한

    위한

    위한

    위한

    중복

    중복

    중복

    중복

    함수

    다함

    수다

    함수

    다함

    수다

    . ...

  • 예제

    모음

    _2소

    스-

    5

    086 for(

    int i = 0

    ; i < G

    etS

    ize()

    ; i+

    +)

    087 {

    088 for(

    int j = 0

    ; j < rig

    ht.G

    etS

    ize()

    ; j+

    +)

    089 if

    (GetIte

    m(i)

    == rig

    ht.G

    etIte

    m(j))

    090 {

    091 tm

    pSet.AddItem

    (GetIte

    m(i))

    ;092 b

    reak;

    093 }

    094 }

    095

    096 retu

    rn tm

    pSet;

    두 두두두집

    합의

    집합

    의집

    합의

    집합

    의교

    집합

    을교

    집합

    을교

    집합

    을교

    집합

    을구

    한다

    구한

    다구

    한다

    구한

    다. ...

    097 }

    098

    099 M

    ySet M

    ySet::o

    pera

    tor*

    (MyS

    et right)

    100 {

    101 int flag =

    0;

    102 M

    ySet tm

    pSet;

    103

    104 for(

    int i = 0

    ; i < G

    etS

    ize()

    ; i+

    +)

    105 tm

    pSet.AddItem

    (GetIte

    m(i))

    ;106

    107 for(

    int j = 0

    ; j < rig

    ht.G

    etS

    ize()

    ; j+

    +)

    108 {

  • 예제

    모음

    _2소

    스-

    6

    109 fla

    g =

    0;

    110 for(

    int i = 0

    ; i < tm

    pSet.G

    etS

    ize()

    ; i+

    +)

    111 if

    (tm

    pSet.G

    etIte

    m(i)

    == rig

    ht.G

    etIte

    m(j))

    112 {

    113 fla

    g =

    1;

    114 b

    reak;

    115 }

    116

    117 if

    (fla

    g =

    = 0

    ) tm

    pSet.AddItem

    (rig

    ht.G

    etIte

    m(j))

    ;118 }

    119

    두 두두두집

    합의

    집합

    의집

    합의

    집합

    의합

    집합

    을합

    집합

    을합

    집합

    을합

    집합

    을구

    한다

    구한

    다구

    한다

    구한

    다. ...

    120 retu

    rn tm

    pSet;

    121 }

    122

    123 v

    oid

    main

    ()124 {

    125 int s1[

    ] = {

    1, 3, 5, 7 , 9

    , 1

    1};

    126 int s2[

    ] = {

    11, 13, 7 ,

    9 , 2

    0};

    127

    128 M

    ySet set1

    (s1,

    6);

    129 M

    ySet set2

    (s2,

    5);

    130

  • 예제

    모음

    _2소

    스-

    7

    131 c

    out << "

    SET1 =

    { 1

    , 3, 5, 7 , 9

    , 1

    1}\

    n";

    132 c

    out << "

    SET2 =

    { 1

    1, 13, 7 , 9

    , 2

    0}\

    n";

    133

    134 M

    ySet In

    ter;

    135

    136 Inte

    r = s

    et1

    ^set2

    ;

    137

    138 c

    out << "

    SET1 ^

    SET2 =

    ";

    139 Inte

    r.Print(

    );

    140

    두 두두두집

    합의

    집합

    의집

    합의

    집합

    의교

    집합

    을교

    집합

    을교

    집합

    을교

    집합

    을구

    한다

    구한

    다구

    한다

    구한

    다. ...

    141 M

    ySet U

    ni;

    142

    143 U

    ni = s

    et1

    *set2

    ;

    144

    145 c

    out << "

    SET1 *

    SET2 =

    ";

    146 U

    ni.Print(

    );

    147 }

    두 두두두집

    합의

    집합

    의집

    합의

    집합

    의합

    집합

    을합

    집합

    을합

    집합

    을합

    집합

    을구

    한다

    구한

    다구

    한다

    구한

    다. ...

  • 연산

    자연

    산자

    중복

    중복

    연산

    자중

    복이

    란, 같

    은연

    산자

    에서

    로다

    른매

    개변

    수를

    사용

    하여

    , 선

    택적

    으로

    연산

    을수

    행할

    수있

    도록

    하는

    것이

    다. 연

    산자

    중복

    은함

    수중

    복의

    부분

    집합

    에불

    과하

    다. 그

    리고

    항상

    해당

    클래

    스와

    관련

    되어

    중복

    되며

    , 중

    복되

    는경

    우에

    는본

    래연

    산자

    의의

    미가

    사라

    지게

    된다

    . 아

    울러

    모든

    연산

    자가

    중복

    되는

    것이

    아니

    므로

    , 중

    복되

    는연

    산자

    에한

    하여

    사용

    해야

    한다

    .

    요약 중

    복의

    중복

    의제

    약제

    약연

    산자

    의우

    선순

    위는

    변경

    될수

    없다

    .연

    산자

    가취

    하는

    피연

    산자

    의개

    수는

    바뀔

    수없

    으며

    디폴

    트인

    자역

    시사

    용할

    수없

    다.

    ., .*

    , ::

    , ?:과

    같은

    연산

    자는

    중복

    되지

    않는

    다.

    =, []

    , ()

    , ->와

    같은

    연산

    자들

    은클

    래스

    의멤

    버함

    수로

    만정

    의할

    수있

    다.

  • www.themegallery.com

    IT C

    ookB

    ook

    for Begin

    ner, C

    ++

    IT C

    ookB

    ook

    for Begin

    ner, C

    ++

    IT C

    ookB

    ook

    for Begin

    ner, C

    ++

    IT C

    ookB

    ook

    for Begin

    ner, C

    ++ 기

    초기

    초기

    초기

    초10 101010

    장 장장장끝 끝끝끝