0

次のプログラムを検討してください: (ここでライブデモを参照してください。 )

#include <iostream>
class Base
{
    int s{9};
    public:
        operator int()
        {
            return s;
        }
};
class Derived : public Base
{
    int s{18};
};
int main()
{
    Base b;
    int s=b;
    std::cout<<s<<'\n';

    Derived d;
    int m=d;
    std::cout<<m;
}

プログラムの出力は次のとおりです。

9

9

ここでは、クラスの変換演算子をBase継承しているため、m変数の初期化は有効です。

sしかし今、Derived に属するデータ メンバーの値を出力したいと思います。これどうやってするの?

派生クラスの変換演算子も書き換える必要があるのでしょうか? 同じBaseクラス変換演算子を再利用できませんか?

4

1 に答える 1

3

のパラメーターsBaseでシャドウされていますが、クラスDerived内の変換演算子であるため、その内部で使用されています。あなたはこれを行うことができます:BaseBase::s

class Base
{
    int s{9};
    public:
        Base() {}
        Base(int v) : s(v) {}
        operator int()
        {
            return s;
        }
};
class Derived : public Base
{
public:
    Derived() : Base(18)
    {
    }
};

または独自の変換演算子を に記述しDerivedます。

于 2015-09-10T14:23:07.570 に答える