我对转换运算符的继承感到困惑

I'm confused about inheritance of conversion operator

本文关键字:继承 转换 运算符      更新时间:2023-10-16

考虑以下程序:(查看这里的实时演示)

#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变量的初始化是有效的。

但是现在我想打印属于Derived的s数据成员的值。我该怎么做呢?

是否有必要为派生类重写转换操作符?我不能重用相同的Base类转换操作符吗?

您的Bases参数在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中编写自己的转换操作符