chuong 08 - mot so van de khac.pdf

Upload: nguyenlegiaphung

Post on 03-Feb-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    1/64

    CHNG 8.MT S VN KHC

    ThS. Trn Anh Dng

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    2/64

    Khun mu (Template)

    05/12/2014 Lp trnh hng i tng 2

    Lp trnh tng qut1

    Lp trnh tng qut trong C++2

    C++ template3

    Khun mu hm4

    Khun mu lp5

    5

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    3/64

    Gii thiu

    V dxt hm hon vnhsau:

    Nu ta mun thc hin cng vic tng t chomtkiudliukhc, chnghnfloat?

    05/12/2014 Lp trnh hng i tng 3

    voidswap ( int&a, int&b){

    inttemp;

    temp = a; a = b; b = temp;

    }

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    4/64

    Gii thiu

    V dkhc: Ta nhnghamt lpbiudincu

    trc ngnxpcho kiuint

    05/12/2014 Lp trnh hng i tng 4

    classStack {

    public:

    Stack();

    ~Stack();

    voidpush ( constint&i);

    voidpop ( int&i);

    boolisEmpty() const;

    //...

    };

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    5/64

    Gii thiu

    Khai bo v nhnghacaStack ph thuc ti

    mtmcno vo kiudliuint.

    Mtsphngthclytham sv trvkiuint

    Nu ta mun tongnxpcho mtkiud liukhc

    th sao?

    Ta c nn nhngha lihon ton lpStack (ktqu

    stora nhiulpchnghnIntStack, FloatStack,)

    hay khng?

    05/12/2014 Lp trnh hng i tng 5

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    6/64

    Lp trnh tng qut

    Lptrnh tngqut l phngphp lptrnh c

    lpvichi titbiudindliu.

    T tng l ta nh ngha mt khi nim khng ph

    thucmtbiudinc thno, v sau mich ra

    kiudliuthch hplm tham s.

    Nhvytrong mtstrnghp,achi titv

    kiudliuvo trong nhnghahm hoclpl

    iukhng c li.

    05/12/2014 Lp trnh hng i tng 6

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    7/64

    Lp trnh tng qut trong C

    Sdngtrnh tinxl caC

    Trnh tinxl thchinthay thtext trckhi dch

    Do ,ta c thdng #define chra kiudliuv

    thay itichkhi cn.

    05/12/2014 Lp trnh hng i tng 7

    #define TYPE int

    voidswap(TYPE& a, TYPE& b) {

    TYPEtemp;

    temp = a; a = b; b = temp;

    }

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    8/64

    Lp trnh tng qut trong C

    Sdngtrnh tinxl caC

    Nhm chn v dli

    Chcho php ngmtnhngha trong mtchng

    trnh.

    05/12/2014 Lp trnh hng i tng 8

    #define TYPE int

    voidswap(TYPE& a, TYPE& b) {

    TYPEtemp;

    temp = a; a = b; b = temp;}

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    9/64

    C++ Template

    Template (khun mu)l mtcchthay thcho

    php tocc cutrc m khng phichr kiu

    dliungay tu.

    Tkha template cdng trong C++ bo

    cho trnh bin dchbitrngonm theo sau sthao tc mt hoc nhiu kiu d liu cha xc

    nh

    05/12/2014 Lp trnh hng i tng 9

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    10/64

    C++ Template

    T kha template c theo sau bi mt cp

    ngocnhncha tn cacc kiud liu ty

    ccung cp.

    template

    template

    Mt lnh template ch c hiu qu i vi khai

    bo ngay sau n

    05/12/2014 Lp trnh hng i tng 10

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    11/64

    C++ Template

    Hai loikhun mucbn:

    Function templatekhun muhm cho php

    nh ngha cc hm tng qut dng n cc

    kiudliuty .

    Class template khun mu lp cho php

    nh ngha cc lp tng qut dng n cckiudliuty .

    05/12/2014 Lp trnh hng i tng 11

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    12/64

    Khun mu hm

    Khun mu hm l dng khun mu n gin

    nht cho php ta nhngha cc hm dng n

    cc kiudliuty .

    V d sau nh ngha hm swap() bng khun

    mu:

    05/12/2014 Lp trnh hng i tng 12

    template

    voidswap(T & a, T & b) {T temp;

    temp = a; a = b; b = temp;

    }

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    13/64

    Khun mu hm

    Thc cht, khi s dng template, ta nh

    nghamt tpv hncc hm chngnhau vi

    tn swap()

    gi mt trong cc phin bn ny, ta ch cn

    gin vikiudliutngng

    05/12/2014 Lp trnh hng i tng 13

    intx = 1, y = 2;floata = 1.1, b = 2.2;

    swap(x, y); //Gi hm swap() vi kiu int

    swap(a, b); //Gi hm swap() vi kiu float

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    14/64

    Khun mu hm

    Chuyng xyra khi ta bin dchm?

    Trcht,sthay th"T" trong khai bo/nh

    ngha hm swap() khng phi thay th text

    n gin v cng khng c thc hin bi

    trnh tinxl.

    Vicchuynphin bnmucaswap() thnhcc ci t c th cho int v float c thc

    hinbitrnh bin dch.

    05/12/2014 Lp trnh hng i tng 14

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    15/64

    Khun mu hm

    Hy xem xt hot ng ca trnh bin dch khi

    gpligiswap() thnht(vihai tham sint)

    Trcht,trnh bin dchtm xem c mthm

    swap() c khai bo vi 2 tham s kiu int

    hay khng? khng tm thynhng tm thy

    mttemplate c thdng c.

    05/12/2014 Lp trnh hng i tng 15

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    16/64

    Khun mu hm

    Tip theo, n xem xt khai bo ca template

    swap()xem c thkhpcviligihm

    hay khng?

    Ligihm cung cphai tham sthuccng mtkiu

    dliu(int)

    Trnh bin dchthytemplate chra hai tham sthuc

    cng kiuT, nn n ktlunrngT phil kiuint

    Do ,trnh bin dchktlunrngtemplate khpvi

    ligihm

    05/12/2014 Lp trnh hng i tng 16

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    17/64

    Khun mu hm

    Khi xc nh c template khp vi ligi

    hm, trnh bin dch kim tra xem c mt

    phin bn ca swap() vi hai tham s kiu int

    csinh ra ttemplate hay cha?

    Nu c, ligic lin kt (bind) viphin bn

    csinh ra

    Nu khng, trnh bin dch s sinh mt ci t ca

    swap() lyhai tham skiuint - v lin ktligihm

    viphin bnvasinh.

    05/12/2014 Lp trnh hng i tng 17

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    18/64

    Khun mu hm

    Nh vy, n cui quy trnh bin dch on m

    trong v d,sc hai phin bncaswap() c

    tovicc ligihm ca ta c lin ktvi

    phin bnthch hp.

    Chi ph v thi gian bin dch i vi vic s dng

    template?

    Chi ph v khng gian lin quan n mi ci tca

    swap() ctotrong khi bin dch?

    05/12/2014 Lp trnh hng i tng 18

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    19/64

    Khun mu lp

    Tngtvikhun muhm vitham sthuc

    cc kiu ty , ta cng c thnhngha khun

    mu lp (class template) s dng cc th hin

    camthocnhiukiudliuty .

    Vickhai bo mtkhun mulpcngtngt

    vikhun muhm

    05/12/2014 Lp trnh hng i tng 19

    template classClassName {

    definition

    }

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    20/64

    Khun mu lp

    V d: ta stomtcutrc cpigimtcp

    gi trthuckiuty .

    Trcht,xt khai bo Pair cho mtcpgi tr

    kiuint nhsau:

    05/12/2014 Lp trnh hng i tng 20

    struct Pair {

    intfirst;intsecond;

    };

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    21/64

    Khun mu lp

    Ta c th sa khai bo trn thnh mt khun

    mulykiuty :

    Tuy nhin hai thnh vin first v second phi

    thuccng kiu

    05/12/2014 Lp trnh hng i tng 21

    template

    structPair {

    T first;

    T second;

    };

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    22/64

    Khun mu lp

    Ta c thcho php hai thnh vin nhncc kiu

    dliukhc nhau:

    05/12/2014 Lp trnh hng i tng 22

    template

    structPair {

    T first;

    U second;

    };

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    23/64

    Khun mu lp

    to cc th hin ca template Pair, ta phi

    dng k hiu cp ngoc nhn (khc vi khun

    muhm)

    05/12/2014 Lp trnh hng i tng 23

    Pair p; // Khng c

    Pair q; // Creates a pair of ints

    Pair r; // Creates a pair with an int and

    a float

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    24/64

    Khun mu lp

    Khi thit k khun mu (cho lp hoc hm),

    thng thng, ta nn to mt phin bn c th

    trc, sau michuynn thnh mttemplate.

    V d,ta sbtubngvicci thon chnh

    Stack cho snguyn.

    iu cho php pht hin cc vnvkhinim trc khi chuyn thnh phin bn cho s

    dngtngqut.

    05/12/2014 Lp trnh hng i tng 24

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    25/64

    Khun mu lp V d

    V d: Xt lpStack visnguyn

    05/12/2014 Lp trnh hng i tng 25

    class Stack {

    private:

    static const int max = 10;

    intcontents[max], current;

    public:

    Stack(); ~Stack();

    voidpush(const int& i);

    voidpop(int& i);

    boolisEmpty() const;

    boolisFull() const;

    };

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    26/64

    Khun mu lp V d

    05/12/2014 Lp trnh hng i tng 26

    Stack::Stack() { this->current = 0; }

    Stack::~Stack() {}

    voidStack::push(const int& i) {

    if (this->current < this->max) this->contents[this->current++] = i;

    }

    voidStack::pop(int& i) {

    if(this->current > 0) i = this->contents[--this->current];

    }

    boolStack::isEmpty() const{ return(this->current == 0;) }

    boolStack::isFull() const{

    return(this->current == this->max);

    }

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    27/64

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    28/64

    Khun mu lp V d

    05/12/2014 Lp trnh hng i tng 28

    template

    Stack::Stack() {

    this->current = 0;

    }

    template

    Stack::~Stack() { }

    template

    voidStack::push(constT& i)

    {

    if(this->current < this->max)

    this->contents[this->current++] = i;

    }

    Miphngthccnmtlnhtemplate ttrc

    Mikhi dng ton tphmvi, cn mt k hiu ngocnhnkm theo tn kiu.Ta angnhnghamtlpStack, ch khng

    phinhnghalpStack

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    29/64

    Khun mu lp V d

    05/12/2014 Lp trnh hng i tng 29

    template

    voidStack::pop(T& i) {

    if(this->current > 0)

    i = this->contents[--this->current];

    }

    template

    boolStack::isEmpty() const{

    return(this->current == 0;)

    }

    template

    boolStack::isFull() const{

    return(this->current == this->max);

    }

    Thay th kiu ca i tng

    c lu trong ngn xp (trcl int) bngkiuty T

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    30/64

    Khun mu lp V d

    05/12/2014 Lp trnh hng i tng 30

    intx = 5,

    charc = 'a',

    Stack s

    Stack t

    s.push(x);

    t.push(c);s.pop(y);

    t.pop(d);

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    31/64

    Cc tham s khun mu khc

    Phn trc chng ta ch mi ni n cc lnh

    template vitham sthuc"kiu"class.

    Tuy nhin, chng ta c thsdngcc tham s

    kiuv tham sbiuthctrong khun mulp

    template

    Stack s;

    05/12/2014 Lp trnh hng i tng 31

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    32/64

    Cc tham s khun mu khc

    Trong ci tStack, ta c mthngmax quy nh

    s lng ti a cc i tng m ngn xp c

    thchami thhins c cng kch thc

    ivimikiucaitngccha.

    Ta khng munmiStack uc kch thc ti

    a nh nhau C th thm mt tham s vo

    lnh template ch ra mt s int (gi tr ny s

    cdng xc nhgi trcho max)

    05/12/2014 Lp trnh hng i tng 32

    template

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    33/64

    Cc tham s khun mu khc

    05/12/2014 Lp trnh hng i tng 33

    templateclassStack {

    public:

    Stack();

    ~Stack();voidpush(const T& i);

    voidpop(T& i);

    boolisEmpty() const;

    boolisFull() const;

    private:staticconstintmax = M;

    Tcontents[max];

    intcurrent;

    };

    Khai bo tham s mi

    Sdngtham smi xc nh gi trmax ca mt lpthucmtkiuno

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    34/64

    Cc tham s khun mu khc

    05/12/2014 Lp trnh hng i tng 34

    template

    Stack::Stack() { this->current = 0; }

    template

    Stack::~Stack() {}

    template

    void Stack::push(constT& i) {

    if (this->current max)

    this->contents[this->current++] = i;

    }

    Sa cc lnhtemplate

    Sa tn lpdng cho cc

    ton tphmvi

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    35/64

    Cc tham s khun mu khc

    Gita c thtocc thhincacc lpStack

    vicc kiudliuv kch thcadng

    05/12/2014 Lp trnh hng i tng 35

    Stack s;Stack t;

    Stack u;

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    36/64

    Ngoi l (Exception)

    05/12/2014 Lp trnh hng i tng 36

    Gii thiu1

    Cch x l li truyn thng2

    Ngoi l trong C++3

    Kim sot ngoi l4

    Lp ngoi l exception55

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    37/64

    Gii thiu

    Mi on chng trnh u tim n kh nng

    sinh li

    Lichquan: do lptrnh sai

    Likhch quan: do dliu,do trngthi cahthng

    Lic 2 loi?

    Ngoi l (Exception): cc trnghphotngkhng bnh thng

    05/12/2014 Lp trnh hng i tng 37

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    38/64

    Cch x l li truyn thng

    Ci tm xl tinipht sinh ra li

    Lm cho chngtrnh trnn kh hiu

    Khng philc no cngythng tin xl

    Khng nhtthitphixl

    Truyntrngthi ln mctrn

    Thng qua tham s, gi tr tr li hoc bin tng th

    (flag)

    Dnhm

    Kh hiu

    05/12/2014 Lp trnh hng i tng 38

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    39/64

    Cch x l li truyn thng

    05/12/2014 Lp trnh hng i tng 39

    intdevide(intnum, intdenom, int& error){

    if(0 != denom){

    error = 0;

    return num/denom;

    } else{

    error = 1;

    return0;}

    }

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    40/64

    Cch x l li truyn thng

    Kh kimsot chtcc trnghp

    Lishc

    Libnh

    Lptrnh vin thngqun khng xl li

    Bnchtcon ngi

    Thiukinh nghim,ctnh bqua

    05/12/2014 Lp trnh hng i tng 40

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    41/64

    C++ Exception

    ExceptionNgoill cchthng bo v xl

    ligiiquytccc vngpphitrn.

    Tch cphnxl lira khiphnthutton

    chnh.

    Cho php mt hm c th thng bo v nhiu

    loingoilC ch ngoi l mm do hn kiu x l li

    truynthng

    05/12/2014 Lp trnh hng i tng 41

    C

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    42/64

    Cc kiu ngoi l

    Mtngoi l l mti tngcha thng tin v

    mt li v cdng truyn thng tin ti

    cpthcthi cao hn.

    Ngoilc ththuckiudliubtkcaC++

    C sn,chnghnint, char*,

    Hockiungidng tnhngha(thngdng)

    Cc lpngoiltrong thvin

    05/12/2014 Lp trnh hng i tng 42

    C h i l

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    43/64

    C ch ngoi l

    Qu trnh truyn ngoi l t ng cnh thc thi

    hin hnh ti mc thc thi cao hn gi l nm

    mtngoil(throw an exception).

    V tr trong m cahm ningoi lcnm c

    gil imnm (throw point)

    Khi mtngcnhthcthi tipnhnv truy nhp

    mtngoi l,n c coi l btngoi l (catch

    the exception)

    05/12/2014 Lp trnh hng i tng 43

    C h i l

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    44/64

    C ch ngoi l

    Quy trnh gi hm v tr v trong trng hp

    bnh thng:

    05/12/2014 Lp trnh hng i tng 44

    voidmain() {

    intx, y;

    cout > x >> y;

    cout

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    45/64

    C ch ngoi l

    Quy trnh nm v btngoil:

    05/12/2014 Lp trnh hng i tng 45

    throws

    exception

    catches

    exeption

    C h l i l

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    46/64

    C php x l ngoi l

    C ch x l ngoi l ca C++ c 3 tnh nng

    chnh:

    Khnng to v nm ngoi l (sdng tkho

    throw)

    Khnngbt v giiquytngoi l (sdng t

    kho catch)

    Khnngtch logic x l ngoi ltrong mthm

    ra khiphncn licahm (sdngtkho try)

    05/12/2014 Lp trnh hng i tng 46

    N i l th

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    47/64

    Nm ngoi l throw

    nm mtngoil, ta dng tkha throw, km

    theo itngm ta nhnm.

    Ta c thdng mithlm ngoil,kcgi tr

    thuckiuc sn.

    05/12/2014 Lp trnh hng i tng 47

    doubleMyDivide(doublenumerator, doubledenominator){

    if(denominator == 0.0) {

    throwstring(The denominator cannot be 0.);} else{

    returnnumerator / denominator;

    }

    }

    Ki t i l

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    48/64

    Kim sot ngoi l

    Khitrycatch dng :

    Tch phngiiquytlira khiphnc thsinh li

    Quy nh cc loingoi lcbt timc thc thi

    hinhnh

    05/12/2014 Lp trnh hng i tng 48

    try{

    // Code that could generate an exception

    }catch() {

    // Code that resolves an exception of that type

    };

    Ki t i l

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    49/64

    Kim sot ngoi l

    C thc nhiukhicatch, mikhicham

    giiquytmtloingoilcth:

    05/12/2014 Lp trnh hng i tng 49

    try{// Code that could generate an exception

    }catch() {

    // Code that resolves a type1 exception}catch() {

    // Code that resolves a type2 exception}catch() {

    // Code that resolves a typeN exception};

    Ki t i l V d

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    50/64

    Kim sot ngoi l V d

    05/12/2014 Lp trnh hng i tng 50

    voidmain() {intx, y;

    doubleresult;

    cout > x >> y;try{

    result = MyDivide(x, y);

    cout

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    51/64

    S kh i l

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    52/64

    So khp ngoi l

    Khi mtngoilcnm ttrong mtkhitry,

    hthngxl ngoilskimtra cc kiuc

    litk trong khicatch theo thtlitk:

    Khi tm thykiukhp,ngoilccoi l

    cgiiquyt,khng cntiptctm kim.

    Nukhng tm thy,mcthcthi hinhnh b

    kt thc, ngoi l c chuyn ln mc cao

    hn.

    05/12/2014 Lp trnh hng i tng 52

    S kh i l

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    53/64

    So khp ngoi l

    Khi tm cc kiud liukhpvingoi l, trnh

    bin dchni chung skhng thchinikiu

    tng.

    Nu mt ngoi l kiu float c nm, n s khng

    khpvimtkhicatch cho ngoilkiuint

    Mtitnghoctham chiukiudnxuts

    khpvimtlnhcatch dnh cho kiucs

    Numtngoi lkiuCarcnm, n skhpvi

    mtkhicatch cho ngoilkiuMotorVehicle

    05/12/2014 Lp trnh hng i tng 53

    S kh i l

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    54/64

    So khp ngoi l

    Vngpphi?

    Mi ngoi l l i tng c sinh t cy

    MotorVehicle s khp lnh catch u tin (cc

    lnhcn liskhng bao gichy)

    05/12/2014 Lp trnh hng i tng 54

    try{//

    }

    catch(MotorVehicle& mv) {}

    catch(Car& c) {}catch(Truck& t) {};

    So khp ngoi l

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    55/64

    So khp ngoi l

    Nu mun bt cc ngoi l dn xut tch khi

    ngoi l c s, ta phi xp lnh catch cho lp

    dnxutln trc:

    05/12/2014 Lp trnh hng i tng 55

    try{

    //

    }

    catch(Car& c) {}catch(Truck& t) {}

    catch(MotorVehicle& mv) {};

    So khp ngoi l

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    56/64

    So khp ngoi l

    Nu ta mun bt tt c cc ngoi l c nm

    (kccc ngoilta khng thgiiquyt)?

    c mt lnh catch btcmingoi l, ta

    tduba chmbn trong lnhcatch.

    Ch nn s dng n cho lnh catch cui cng

    trong mtkhitry-catch.

    05/12/2014 Lp trnh hng i tng 56

    catch(){

    //

    };

    Lp exception

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    57/64

    Lp exception

    tch hphnnacc ngoi lvo ngn ngC++, lp exception c a vo th vin

    chun.

    Sdng#include v namespace std

    Sdngthvinny, ta c thnm cc thhin

    caexception hoctocc lpdnxutt.

    Lpexception c mthm owhat(), c thnh

    nghaliwhat() trvmtxu k t.

    05/12/2014 Lp trnh hng i tng 57

    Lp exception

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    58/64

    Lp exception

    Mtslpngoilchunkhc cdnxuttlpcsexception.

    File header (cng thuc th vin

    chunC++) chamtslpngoildnxutt

    exception. Trong c hai lpquan trngc

    dnxuttrctiptexception:

    runtime_error

    logic_error

    05/12/2014 Lp trnh hng i tng 58

    Lp exception

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    59/64

    Lp exception

    runtime_error: Cc li trong thi gian chy (ccli l kt qu ca cc tnh hung khng mong

    i,chnghn: htbnh)

    logic_error: Cc li trong logic chng trnh

    (chnghntruyntham skhng hpl)

    Thng thng,ta sdng cc lpny (hoccc

    lp dn xut ca chng) thay v dng trc tip

    exception

    05/12/2014 Lp trnh hng i tng 59

    Lp exception

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    60/64

    Lp exception

    runtime_errorc cc lpdnxutsau:range_error iukinsau (post-condition) bvi phm

    overflow_error xyra trn shc

    bad_alloc khng thcppht bnh

    logic_errorc cc lpdnxutsau:

    domain_error iu kin trc (pre-condition) b viphm

    invalid_argument tham s khng hp l c truyncho hm

    length_errortoitnglnhndi cho php

    out_of_rangetham sngoi khong05/12/2014 Lp trnh hng i tng 60

    Lp exception

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    61/64

    Lp exception

    Ta c thvitlihm MyDivide() sdngccngoilchuntngngnhsau:

    05/12/2014 Lp trnh hng i tng 61

    doubleMyDivide(doublenumerator, doubledenominator)

    {if(denominator == 0.0) {

    throwinvalid_argument(The denominator cannotbe 0.);

    } else{returnnumerator / denominator;

    }

    }

    Lp exception

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    62/64

    Lp exception

    05/12/2014 Lp trnh hng i tng 62

    voidmain() {intx, y;doubleresult;

    do{

    cout > x >> y;

    try{result = MyDivide(x, y);

    cout

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    63/64

    u im exception trong C++

    DsdngDdng chuyniukhinnnic khnngxl

    ngoil

    C thnmnhiuloingoil

    Tch xl ngoilkhithutton

    Tch m xl

    Sdngc php khcKhng bst ngoil(nmtng)

    Chngtrnh dchn,an ton hn

    05/12/2014 Lp trnh hng i tng 63

    Q & A

  • 7/21/2019 Chuong 08 - Mot so van de khac.pdf

    64/64

    Q & A