この問題に対する考えられる解決策の1つはprint()
、基本クラス内に実装するのではなく、継承するクラスに純粋仮想関数を使用して実装するように義務付けることです。現時点では、おそらく次を使用してコードを呼び出します。
class2 c2;
c2.b = 20; // for example
class1 c1;
c1.print( c2 );
しかし、これを実装するためのより良い方法は次のようになります。
class class1
{
protected:
int a;
public:
virtual void print() const = 0;
};
class class2 : public class1
{
public:
int b;
void print() const;
};
void class2::print() const
{
cout << b * a;
}
したがって、今class2
は、ある意味で正しい印刷機能を実装する必要があります。これは、知っている必要がありますが、その逆ではないためです。class2
class1
今、あなたはこれを行うことができます:
class2 c2;
c2.b = 20; // for example
c2.print()
もちろん、これはあなたがやりたいことには役立たないかもしれませんが、一般的にあなたが説明する問題に取り組むためのより良い方法だと思います。