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

您的s参数 ofBase隐藏在 中Derived,但由于Base类中的转换运算符在Base::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 回答