9장 가상 함수와 추상 클래스 (체크 타임 풀이)

sua·2022년 4월 9일
0

명품 C++ Programming

목록 보기
2/10
post-thumbnail

1. 다음 코드를 보자

class A {
public:
	void f() { cout << "A::f()" << endl; }
    virtual void g() { cout << "A::g()" << endl; }
    ~A() { cout << "~A()" << endl; }
};
class B : public A {
public:
	void f() { cout << "B::f()" << endl; }
    virtual void g() { cout << "B::g()" << endl; }
    ~B() { cout << "~B()" << endl; }
};

int main() {
	B *q = new B();
    A *p = q;
}

1) main()의 끝에 다음 각 보기를 추가하였을 때, 실행 결과는 무엇이며 동적 바인딩이 발생하는 보기는 어느것인가?
① p->f(); ② p->g(); ③ q->f(); ④q->g();
답 : 2번
풀이 : p 가 업캐스팅 된 포인터인데 g() 함수를 호출하면 g 함수가 가상 함수이므로 동적 바인딩 된다.

2) main() 의 끝에 다음 각 코드를 별도로 실행한다면 실행 결과는 무엇인가?
delete p; delete q;
답 : ~A() / ~B() ~A()

3) 클래스 A의 소멸자에 virtual을 붙였을 때, delete p; 와 delete q; 의 실행 결과는?
답 : ~B() ~A() / ~B() ~A()


2. 다음에서 추상 클래스는?

(1)

class Base {
	virtual void run();
}

(2)

abstract class Base {
	virtual void run();
}

(3)

class Base {
	virtual void run() = 0;
}

(4)

abstract class Base {
	virtual void run() = 0;
}

답 : 3번


3. 만일 Shape이 추상 클래스라고 하면 다음 중 옳은 코드는?

1) Shape shape;

2) Shape *p;

3) Shape *p = new Shape();

4) class Circle : public Shape {

    };

    Circle circle;

답 : 2번
profile
가보자고

0개의 댓글