hugDog
Android DevLog
hugDog
전체 방문자
였늘
μ–΄μ œ
  • πŸ™Œ Hello? (162)
    • πŸ§©μ•ˆλ“œλ‘œμ΄λ“œ (12)
      • κ°œλ… 정리 (5)
      • 버그 ν•΄κ²° (4)
      • 기타 (3)
    • πŸ”μ•Œκ³ λ¦¬μ¦˜ (54)
      • κ°œλ… (0)
      • λ°±μ€€ (48)
      • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ (6)
    • πŸ“„κ°œλ°œ 일지 (0)
      • FINPO (0)
    • πŸ”€ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ (71)
      • C++ 정리 (49)
      • C++κΈ°μ΄ˆν”ŒλŸ¬μŠ€ μ—°μŠ΅λ¬Έμ œ (20)
      • Kotlin (2)
    • ⭐Project (1)
    • 🚴TIL (13)
      • Clean Code (13)
    • πŸš©κΈ°νƒ€ (9)
      • λͺ©ν‘œ (6)
      • 일상 (3)
      • λ¬Έμ„œ (0)

인기 κΈ€

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
hugDog

Android DevLog

πŸ”€ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/C++κΈ°μ΄ˆν”ŒλŸ¬μŠ€ μ—°μŠ΅λ¬Έμ œ

(C++κΈ°μ΄ˆν”ŒλŸ¬μŠ€ 6판 ν”„λ‘œκ·Έλž˜λ° μ—°μŠ΅ μ •λ‹΅,μ†”λ£¨μ…˜) CHAPTER 15 ν”„λ Œλ“œ,μ˜ˆμ™Έ,기타 사항 p.1206~ 1번~4번

2020. 10. 8. 19:37
728x90

1번

// tv.h -- Tv ν΄λž˜μŠ€μ™€ Remote 클래슀
#ifndef TV_H_
#define TV_H_

class Tv
{
public:
    friend class Remote;   // RemoteλŠ” Tv의 private 뢀뢄에 μ ‘κ·Όν•  수 μžˆλ‹€
    enum { Off, On };
    enum { MinVal, MaxVal = 20 };
    enum { Antenna, Cable };
    enum { TV, DVD };

    Tv(int s = Off, int mc = 125) : state(s), volume(5),
        maxchannel(mc), channel(2), mode(Cable), input(TV) {}
    void onoff() { state = (state == On) ? Off : On; }
    bool ison() const { return state == On; }
    bool volup();
    bool voldown();
    void chanup();
    void chandown();
    void set_mode() { mode = (mode == Antenna) ? Cable : Antenna; }
    void set_input() { input = (input == TV) ? DVD : TV; }
    void settings() const; // λͺ¨λ“  섀정값듀을 좜λ ₯ν•œλ‹€
    void set_mode2(Remote& r);
private:
    int state;             // on λ˜λŠ” off
    int volume;            // λ””μ§€ν„Έ λ³Όλ₯¨μ΄λΌκ³  κ°€μ •ν•œλ‹€
    int maxchannel;        // μ΅œλŒ€ 채널 수
    int channel;           // ν˜„μž¬ μ„€μ •λœ 채널
    int mode;              // μ§€μƒνŒŒ 방솑 λ˜λŠ” 케이블 방솑
    int input;             // TV μž…λ ₯ λ˜λŠ” DVD μž…λ ₯
};

class Remote
{
    friend class Tv;
private:
    int mode;              // TV μ‘°μ •κΈ° λ˜λŠ” DVD μ‘°μ •κΈ°
    int mode2; //λŒ€ν™” λͺ¨λ“œ λ˜λŠ” 일반 λͺ¨λ“œ
public:
    enum{Normal,Conversation};
    Remote(int m = Tv::TV,int m2 = Normal) : mode(m),mode2(m2) {}
    bool volup(Tv& t) { return t.volup(); }
    bool voldown(Tv& t) { return t.voldown(); }
    void onoff(Tv& t) { t.onoff(); }
    void chanup(Tv& t) { t.chanup(); }
    void chandown(Tv& t) { t.chandown(); }
    void set_chan(Tv& t, int c) { t.channel = c; }
    void set_mode(Tv& t) { t.set_mode(); }
    void set_input(Tv& t) { t.set_input(); }
    void show_mode2();
};

inline void Tv::set_mode2(Remote& r) { if (state == On) r.mode2 = (r.mode2 == Remote::Normal) ? Remote::Conversation : Remote::Normal; }

#endif


// tv.cpp -- Tv 클래슀λ₯Ό μœ„ν•œ λ©”μ„œλ“œλ“€(Remote λ©”μ„œλ“œλ“€μ€ 인라인으둜 μ‚¬μš©)
#include <iostream>
#include "tv.h"

bool Tv::volup()
{
    if (volume < MaxVal)
    {
        volume++;
        return true;
    }
    else
        return false;
}
bool Tv::voldown()
{
    if (volume > MinVal)
    {
        volume--;
        return true;
    }
    else
        return false;
}

void Tv::chanup()
{
    if (channel < maxchannel)
        channel++;
    else
        channel = 1;
}

void Tv::chandown()
{
    if (channel > 1)
        channel--;
    else
        channel = maxchannel;
}

void Tv::settings() const
{
    using std::cout;
    using std::endl;
    cout << "TV is " << (state == Off ? "OFF" : "ON") << endl;
    if (state == On)
    {
        cout << "λ³Όλ₯¨ = " << volume << endl;
        cout << "채널 = " << channel << endl;
        cout << "λͺ¨λ“œ = "
            << (mode == Antenna ? "μ§€μƒνŒŒ 방솑" : "케이블 방솑") << endl;
        cout << "μž…λ ₯ = " << (input == TV ? "TV" : "DVD") << endl;
    }
}

void Remote::show_mode2()
{
    std::cout << "λͺ¨λ“œ2 = " << (mode2 == Normal ? "Normal" : "Conversation") << '\n';
}


//use_tv.cpp -- Tv와 Remote 클래슀λ₯Ό μ‚¬μš©ν•œλ‹€
#include <iostream>
#include "tv.h"

int main()
{
    using std::cout;
    Tv s42;
    cout << "42\" TV의 초기 μ„€μ •κ°’:\n";
    s42.settings();
    s42.onoff();
    s42.chanup();
    cout << "\n42\" TV의 λ³€κ²½λœ μ„€μ •κ°’:\n";
    s42.settings();

    Remote grey;
    cout << "\ngrey 리λͺ¨μ»¨μ˜ 초기 μ„€μ •κ°’:\n";
    grey.show_mode2();

    grey.set_chan(s42, 10);
    grey.volup(s42);
    grey.volup(s42);
    cout << "\n리λͺ¨μ½˜ μ‚¬μš© ν›„ 42\" TV의 μ„€μ •κ°’:\n";
    s42.settings();
    s42.set_mode2(grey);
    grey.show_mode2();

    s42.onoff();
    cout << "\nTv μ’…λ£Œ ν›„ Remote의 λͺ¨λ“œ λ³€κ²½\n";
    s42.settings();
    s42.set_mode2(grey);
    grey.show_mode2();


    return 0;
}

 

 

2번

// exc_mean.h  -- hmean(), gmean()을 μœ„ν•œ μ˜ˆμ™Έ 클래슀
#include <iostream>
#include<stdexcept>

class bad_hmean : public std::logic_error
{
public:
    explicit bad_hmean(const std::string &s= "잘λͺ»λœ λ§€κ°œλ³€μˆ˜: a = -b\n") : logic_error(s) {}
};



class bad_gmean : public std::logic_error
{
public:
    explicit bad_gmean(const std::string&s= "gmean() λ§€κ°œλ³€μˆ˜λ“€μ€ >= 0이어야 ν•©λ‹ˆλ‹€.\n") 
        : logic_error(s) {} 
};

//error4.cpp -- μ˜ˆμ™Έ ν΄λž˜μŠ€λ“€μ„ μ‚¬μš©ν•œλ‹€
#include <iostream>
#include <cmath> // (λ˜λŠ” math.h) unix μ‚¬μš©μžλŠ” -lm ν”Œλž˜κ·Έκ°€ ν•„μš”ν•˜λ‹€
#include "exc_mean.h"
// ν•¨μˆ˜ μ›ν˜•
double hmean(double a, double b) throw(bad_hmean);
double gmean(double a, double b) throw(bad_gmean);
int main()
{
    using std::cout;
    using std::cin;
    using std::endl;

    double x, y, z;

    cout << "두 수λ₯Ό μž…λ ₯ν•˜μ‹­μ‹œμ˜€: ";
    while (cin >> x >> y)
    {
        try {                  // try λΈ”λ‘μ˜ μ‹œμž‘
            z = hmean(x, y);
            cout << x << ", " << y << "의 쑰화평균은 "
                << z << "μž…λ‹ˆλ‹€.\n";
            cout << x << ", " << y << "의 κΈ°ν•˜ν‰κ· μ€ "
                << gmean(x, y) << "μž…λ‹ˆλ‹€.\n";
            cout << "λ‹€λ₯Έ 두 수λ₯Ό μž…λ ₯ν•˜μ‹­μ‹œμ˜€(끝내렀면 q): ";
        }				// try λΈ”λ‘μ˜ 끝
        catch (bad_hmean& bg)    	// catch λΈ”λ‘μ˜ μ‹œμž‘
        {
            bg.what();
            cout << "λ‹€μ‹œ ν•˜μ‹­μ‹œμ˜€.\n";
            continue;
        }
        catch (bad_gmean& hg)
        {
            cout << hg.what();
            cout << "μ£„μ†‘ν•©λ‹ˆλ‹€. 더 이상 μ§„ν–‰ν•  수 μ—†μŠ΅λ‹ˆλ‹€.\n";
            break;
        } 				// catch λΈ”λ‘μ˜ 끝
    }
    cout << "ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•©λ‹ˆλ‹€.\n";
    return 0;
}

double hmean(double a, double b)
{
    if (a == -b)
        throw bad_hmean();
    return 2.0 * a * b / (a + b);
}

double gmean(double a, double b)
{
    if (a < 0 || b < 0)
        throw bad_gmean();
    return std::sqrt(a * b);
}

 

 

3번

// exc_mean.h  -- hmean(), gmean()을 μœ„ν•œ μ˜ˆμ™Έ 클래슀
#include <iostream>
#include<stdexcept>
class bad_mean : public std::logic_error
{
protected:
    double v1;
    double v2;
public:
    bad_mean(double a = 0, double b = 0,const std::string &s = "none")
        :v1(a),v2(b),logic_error(s) {}
    virtual ~bad_mean() {}
    virtual void mesg() = 0;
};

class bad_hmean : public bad_mean
{
public:
    explicit bad_hmean(double a=0,double b=0,const std::string &s= "bad_mean()μ—μ„œ μ—λŸ¬ λ°œμƒ\n") 
        : bad_mean(a,b,s) {}
    void mesg()
    {
        std::cout <<"a: " << v1 << ", b: "<< v2 << '\n';
        std::cout<<"잘λͺ»λœ λ§€κ°œλ³€μˆ˜: a = -b\n";
    }
};


class bad_gmean : public bad_mean
{
public:
    explicit bad_gmean(double a = 0, double b = 0, const std::string&s= "gmean()μ—μ„œ μ—λŸ¬ λ°œμƒ\n")
        : bad_mean(a, b, s) {}
    void mesg()
    {
        std::cout << "a: " << v1 << ", b: " << v2 << '\n';
        std::cout << "gmean() λ§€κ°œλ³€μˆ˜λ“€μ€ >= 0이어야 ν•©λ‹ˆλ‹€.\n";
    }
};

//error4.cpp -- μ˜ˆμ™Έ ν΄λž˜μŠ€λ“€μ„ μ‚¬μš©ν•œλ‹€
#include <iostream>
#include <cmath> // (λ˜λŠ” math.h) unix μ‚¬μš©μžλŠ” -lm ν”Œλž˜κ·Έκ°€ ν•„μš”ν•˜λ‹€
#include "exc_mean.h"
// ν•¨μˆ˜ μ›ν˜•
double hmean(double a, double b) throw(bad_hmean);
double gmean(double a, double b) throw(bad_gmean);
int main()
{
    using std::cout;
    using std::cin;
    using std::endl;

    double x, y, z;

    cout << "두 수λ₯Ό μž…λ ₯ν•˜μ‹­μ‹œμ˜€: ";
    while (cin >> x >> y)
    {
        try {                  // try λΈ”λ‘μ˜ μ‹œμž‘
            z = hmean(x, y);
            cout << x << ", " << y << "의 쑰화평균은 "
                << z << "μž…λ‹ˆλ‹€.\n";
            cout << x << ", " << y << "의 κΈ°ν•˜ν‰κ· μ€ "
                << gmean(x, y) << "μž…λ‹ˆλ‹€.\n";
            cout << "λ‹€λ₯Έ 두 수λ₯Ό μž…λ ₯ν•˜μ‹­μ‹œμ˜€(끝내렀면 q): ";
        }				// try λΈ”λ‘μ˜ 끝
        catch (bad_mean& bg)    	// catch λΈ”λ‘μ˜ μ‹œμž‘
        {
            if (typeid(bad_hmean) == typeid(bg))
            {
                cout<<bg.what();
                bg.mesg();
                break;
            }
            else if (typeid(bad_gmean) == typeid(bg))
            {
                cout<<bg.what();
                bg.mesg();
                break;
            }
        }
    }
    cout << "ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•©λ‹ˆλ‹€.\n";
    return 0;
}

double hmean(double a, double b)
{
    if (a == -b)
        throw bad_hmean(a,b);
    return 2.0 * a * b / (a + b);
}

double gmean(double a, double b)
{
    if (a < 0 || b < 0)
        throw bad_gmean(a,b);
    return std::sqrt(a * b);
}

 

 

4번

// use_sales.cpp  -- λ‚΄ν¬λœ μ˜ˆμ™Έ
#include <iostream>
#include "sales.h"

int main()
{
    using std::cout;
    using std::cin;
    using std::endl;

    double vals1[12] =
    {
        1220, 1100, 1122, 2212, 1232, 2334,
        2884, 2393, 3302, 2922, 3002, 3544
    };

    double vals2[12] =
    {
        12, 11, 22, 21, 32, 34,
        28, 29, 33, 29, 32, 35
    };

    Sales sales1(2011, vals1, 12);
    LabeledSales sales2("Blogstar", 2012, vals2, 12);
    LabeledSales::nbad_index* p;

    cout << "첫 번째 try 블둝:\n";
    try
    {
        int i;
        cout << "Year = " << sales1.Year() << endl;
        for (i = 0; i < 12; ++i)
        {
            cout << sales1[i] << ' ';
            if (i % 6 == 5)
                cout << endl;
        }
        cout << "Year = " << sales2.Year() << endl;
        cout << "Label = " << sales2.Label() << endl;
        for (i = 0; i <= 12; ++i)
        {
            cout << sales2[i] << ' ';
            if (i % 6 == 5)
                cout << endl;
        }
        cout << "try 블둝 1의 끝.\n";
    }
    catch (Sales::bad_index& bad)
    {
        cout << bad.what();
        if (p = dynamic_cast<LabeledSales::nbad_index*>(&bad))
            cout << "Company: " << p->label_val() << endl;
        cout << "잘λͺ»λœ 인덱슀: " << bad.bi_val() << endl;
    }
    cout << "\nλ‹€μŒ try 블둝:\n";
    try
    {
        sales2[2] = 37.5;
        sales1[20] = 23345;
        cout << "try 블둝 2의 끝.\n";
    }
    catch (Sales::bad_index& bad)
    {
        cout << bad.what();
        if (p = dynamic_cast<LabeledSales::nbad_index*>(&bad))
            cout << "Company: " << p->label_val() << endl;
        cout << "잘λͺ»λœ 인덱슀: " << bad.bi_val() << endl;
    }
    cout << "ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•©λ‹ˆλ‹€.\n";
    return 0;
}
728x90
μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ (μƒˆμ°½μ—΄λ¦Ό)
    'πŸ”€ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/C++κΈ°μ΄ˆν”ŒλŸ¬μŠ€ μ—°μŠ΅λ¬Έμ œ' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • (C++κΈ°μ΄ˆν”ŒλŸ¬μŠ€ 6판 ν”„λ‘œκ·Έλž˜λ° μ—°μŠ΅ μ •λ‹΅,μ†”λ£¨μ…˜) CHAPTER 17 μž…λ ₯, 좜λ ₯, 파일 p.1458~ 1번~7번
    • (C++κΈ°μ΄ˆν”ŒλŸ¬μŠ€ 6판 ν”„λ‘œκ·Έλž˜λ° μ—°μŠ΅ μ •λ‹΅,μ†”λ£¨μ…˜) CHAPTER 16 string ν΄λž˜μŠ€μ™€ ν‘œμ€€ ν…œν”Œλ¦Ώ 라이브러리 p.1342~ 1번~10번
    • (C++κΈ°μ΄ˆν”ŒλŸ¬μŠ€ 6판 ν”„λ‘œκ·Έλž˜λ° μ—°μŠ΅ μ •λ‹΅,μ†”λ£¨μ…˜) CHAPTER 14 C++ μ½”λ“œμ˜ μž¬ν™œμš© p.1103~ 1번~5번
    • (C++κΈ°μ΄ˆν”ŒλŸ¬μŠ€ 6판 ν”„λ‘œκ·Έλž˜λ° μ—°μŠ΅ μ •λ‹΅,μ†”λ£¨μ…˜) CHAPTER 13 클래슀의 상속 p.989~ 1번~4번
    hugDog
    hugDog
    μ•ˆλ“œλ‘œμ΄λ“œ 곡뢀 쀑인 ν•™μƒμž…λ‹ˆλ‹€!

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”