c++定义到基类的转换
C++ Define Conversion to Base Class
我在定义和使用基类的转换操作符时遇到了困难。考虑以下内容:
class base
{
public:
base(const base&);
base& operator=(const base&);
//some stuff
};
class child : public base
{
public:
operator base() const;
//some more stuff
};
int main()
{
child c;
base b=c;
b=c;
}
如果我尝试将子对象转换为基对象,则永远不会调用operator base()
(即使我显式地进行转换)。相反,直接调用基类中的复制构造函数或赋值操作符,而不进行转换。
当child
被赋值(或复制构造)给base
时,如何使operator base()
被调用?
到基类的转换函数在语法上是合法的,但它永远不会被调用。来自标准草案n3337:
12.3.2转换函数[class.conv. s]fct]§1
[…转换函数决不用于转换(可能)对象转换为(可能是)相同的对象类型(或对它的引用),对它的基类(可能是cv限定的)类型(或对它的引用),或(可能是cv限定的)void。[…]
语言有不同的从派生到基的转换机制。阅读对象切片。简单地说,它是自动为您完成的。
相关文章:
- 从基类实例调用派生类方法而不进行强制转换
- C++将派生类转换为基类时'object slicing'期间发生的情况
- 派生类(构造函数具有参数)和基类(构造函数缺少参数)之间没有可行的转换
- 调用不在基类中的派生类函数而不进行动态强制转换,以最大程度地提高性能
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 我们可以在不知道其真实类型的情况下将基类指针转换为派生类指针吗?
- 从未使用过到基类的转换
- 基类到派生类的强制转换向量
- 有没有办法复制派生类指针的向量而不将其强制转换为基类?
- 为什么此代码不将基类强制转换为 c++ 中的派生类?
- 如何在运行时将指向派生类的 void* 正确转换为指向基类的 void*
- 从基类的共享指针向下转换到派生类的引用
- 为了访问方法,从基类动态转换为派生类
- 派生类 插入和提取运算符重载以及基类与派生类之间的强制转换
- 将空基类优化对象强制转换为另一种类型是否会破坏严格的别名?
- 基类到派生模板类的强制转换指针,而不知道类型
- 带有基类指针的强制转换向量,指向子类
- 通过转换基类指针来设置派生类字段
- 强制转换基类问题
- 强制转换基类保护方法的返回指针的替代方法