C++第3版 12章 練習問題解答

目次へ戻る

12.1

struct base {virtual void iam(){cout << "base\n";}};
struct der1 : base {void iam(){cout << "der1\n";}};
struct der2 : base {void iam(){cout << "der2\n";}};

    der1 d1;    der2 d2;
    base *p1 = &d1, *p2 = &d2;
    d1.iam(); p1->iam();
    d2.iam(); p2->iam();

12.2

パス。

12.3

パス。

12.4

パス。

12.5

パス。

12.6

パス。

12.7

パス。

12.8

パス。

12.9

--------------

12.10

このやり方だと、基底クラスが、全ての派生クラスを知っている必要がある。
#include <iostream>
using namespace std;

class Circle;
class Square;
class Triangle;
class Shape {
    // ...
public:
    virtual bool Check(const Shape&)const = 0;
    virtual bool Check(const Circle&)const = 0;
    virtual bool Check(const Square&)const = 0;
    virtual bool Check(const Triangle&)const = 0;
};
class Circle : public Shape {
    // ...
public:
    bool Check(const Shape& s)const{return s.Check(*this);}
    bool Check(const Circle&)const
        {cout << "Circle & Circle\n"; return true;}
    bool Check(const Square&)const
        {cout << "Circle & Square\n"; return true;}
    bool Check(const Triangle&)const
        {cout << "Circle & Triangle\n"; return true;}
};
class Square : public Shape {
    // ...
public:
    bool Check(const Shape& s)const{return s.Check(*this);}
    bool Check(const Circle& c)const{return c.Check(*this);}
    bool Check(const Square&)const
        {cout << "Square & Square\n"; return true;}
    bool Check(const Triangle&)const
        {cout << "Square & Triangle\n"; return true;}
};
class Triangle : public Shape {
    // ...
public:
    bool Check(const Shape& s)const{return s.Check(*this);}
    bool Check(const Circle& c)const{return c.Check(*this);}
    bool Check(const Square& s)const{return s.Check(*this);}
    bool Check(const Triangle&)const
        {cout << "Triangle & Triangle\n"; return true;}
};
bool intersect(const Shape& s,const Shape& t)
    {return s.Check(t);}

int main()
{
    Circle      c;
    Square      s;
    Triangle    t;
    intersect(c,s);
    intersect(t,c);
}

12.11

あるべきシミュレーション言語参照。 (または、ここ)

12.12

パス。

12.13

Point は座標という概念を表し、Dot は描画される Point の概念を表すから。

12.14

パス。
前章目次次章