我对转换运算符的继承感到困惑
I'm confused about inheritance of conversion operator
考虑以下程序:(查看这里的实时演示)
#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
类转换操作符吗?
您的Base
的s
参数在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
中编写自己的转换操作符
相关文章:
- 继承模板化转换运算符
- 共享指针继承,而不先显式强制转换
- 事件系统:使用类型转换或联合进行继承
- 从继承的类C++强制转换
- 继承会导致不明确的转换
- 将 void* 强制转换为多个继承类的超类不会调用正确的方法
- C++ 关于类继承的隐式转换
- 使用类继承将单个喜欢的列表转换为双向链表
- 如何将C++继承的带有函数的类转换为C样式?
- C++ MSVC 中的访问冲突,但不在 GCC 中进行多重继承和强制转换
- 模板实例和继承的转换错误
- 为什么 GCC 在使用继承的构造函数时警告我无用的强制转换
- 为什么私有继承对象允许成员函数将派生的*转换为基*,而外部不能
- 在多重继承场景中动态强制转换类型
- 使用模板无法按预期工作进行继承和强制转换
- 将void*强制转换为具有多重继承的类
- 避免在继承的树类中进行下转换
- C++ 中的多重继承转换
- c++错误:继承转换无效
- GCC将私有继承转换为父