11주차 퀴즈

문제1

다음 프로그램의 출력과 가상 함수에 대해서 설명하세요(2점).

#include <iostream>
using namespace std;

struct TP1 {
    void print(){ cout << "1" << endl; };
};

struct TP2 : public TP1 {
    virtual void print(){ cout << "2" << endl; };
};

struct TP3 : public TP2 {
    void print(){ cout << "3" << endl; };
};

struct TP4 {
    void print(){ cout << "4" << endl; };
};

struct TP5 : public TP3, public TP4 {
    void print(){ cout << "5" << endl; };
};

int main(){
    TP5 p5; p5.print();
    TP4& p4 = p5; p4.print();
    TP3& p3 = p5; p3.print();
    TP2& p2 = p5; p2.print();
    TP1& p1 = p5; p1.print();
}

문제2

다음 프로그램의 문제와 해결 방법에 대해서 설명하세요(2점).

#include <iostream>
using namespace std;

struct A {
    A(){ cout << "A constructed" << endl; };
    ~A(){ cout << "A destructed" << endl; };
};

struct B : public A {
    B(){ cout << "B constructed" << endl; };
    ~B(){ cout << "B destructed" << endl; };
};

struct C : public B {
    C(){ cout << "C constructed" << endl; };
    ~C(){ cout << "C destructed" << endl; };
};

int main()
{
    A* a = new C;
    delete a;
}

문제3

Time, Date, Now 클래스를
다음 클래스 다이어그램에 따라 구현하세요(4점).

#include <iostream>
using namespace std;

// insert your code here

int main()
{
    Now n(2021, 10, 7, 13, 27, 22);   // 2021년 10월 7일 13:27:22
    n.print();

    return 0;
}

문제4

다음 프로그램의 출력에 대해서 설명하세요(2점)?

#include <iostream>
using namespace std;

#define DBG(str) cout << str << endl

class Integer {
    int n;
public:
    Integer(int _n) : n(_n){ DBG("A"); };
    Integer(const Integer& i) : n(i.n){ DBG("B"); };

    Integer& operator=(const Integer& i){ DBG("C"); n = i.n; return *this; };
    Integer& operator+=(const Integer& i){ DBG("D"); n += i.n; return *this; };

    friend Integer operator+(const Integer& a, const Integer& b);
    friend Integer operator*(const Integer& a, const Integer& b);
    friend ostream& operator<<(ostream& os, const Integer& i);

};

Integer operator+(const Integer& a, const Integer& b){
    DBG("E"); return Integer(a.n + b.n);
}
Integer operator*(const Integer& a, const Integer& b){
    DBG("F"); return Integer(a.n * b.n);
}
ostream& operator<<(ostream& os, const Integer& i){
    DBG("G"); os << i.n; return os;
}

int main(){
    Integer n1(1), n2(2);
    Integer n = 5 + n1 + 2 * n2;

    cout << n << endl;
}

댓글남기기