将对象强制转换为父对象
Cast object to parent
我在C++中有继承问题。以下是我想做的:
class parent
{
public:
int a;
};
class son : public parent
{
public:
int b;
operator parent()
{
parent p; p.a = a + b;
return p;
}
}
void funct(parent a)
{
cout<<a.a;
}
son s; s.a = 3; s.b = 4;
funct(s);
我希望它能打印出7。取而代之的是,在不影响任何内容的情况下隐式地进行铸造,并打印出3。有人能给我一个如何做这件事的建议吗?这可能吗?
根据C++标准
转换函数从不用于转换A(可能cv限定)对象到(可能是cv限定的)相同对象类型(或对它的引用),到的(可能是cv合格的)基类该类型(或对它的引用),或to(可能是cv限定的)void。
您可以使用输出数据成员的虚拟函数,也可以定义运算符<lt;作为类的伪虚拟(即调用虚拟函数)。
例如
class parent
{
public:
virtual std::ostream & out( std::ostream &os ) const { return os << a; }
int a;
};
class son : public parent
{
public:
int b;
std::ostream & out( std::ostream &os ) const { return os << a + b; }
};
std::ostream & operator <<( std::ostream &os, const parent &obj )
{
return obj.out( os );
}
这就是打印7的方式:
funct(s.operator parent());
还有一点需要记住:
funct(s)
//将导致对象切片,因为"funct"按值获取基类对象。
对象通过以下方法自动转换为父类:
operator base_type&() {return (base_type&)*this;}
您无法更改此方法。
您只能将继承更改为受保护继承或私有继承。编译器从不执行隐式强制转换,即使您定义了强制转换运算符也是如此。
您只能编写一个普通的方法,该方法可以执行强制转换并在需要时调用它。
相关文章:
- 在 C++ 中将对象转换为派生类型
- Swig无法将python3的字节对象转换为std::string
- 如何将 Python 对象转换为 Cython 扩展类型的 std::vector 并返回?
- 使用 c++ 将 2d CAD 对象转换为 TIFF 格式
- 将对象转换为指向对象的指针?
- 将使用基类 Ctor创建的对象转换为派生类
- C++中的重载歧义,用于自动将对象转换为"printable"格式
- 无法将类对象转换为函数默认参数中的参考
- 无法将对象转换为初始化中的对象*
- 使用提升序列化将类对象转换为矢量无符号字符<>
- 防止在执行时将两个类中的两个对象转换为 bool:if(a!=b)
- 如何在Cython中将Python对象转换为C++类型
- 重载运算符 -- 无法在赋值中将对象转换为基类型
- Cpp:Cpp中的JSON解析器,提供支持序列化/反序列化功能,将JSON对象转换为用户定义的类
- 如何将 'int *' 类型的 swig 对象转换为 ctypes int*
- 将对象转换为 char,然后"uncasting it back"
- 如何在C++中使用boost库将类对象转换为json字符串
- 在 c++ 中使用重载运算符将父对象转换为子对象
- 字符串流 - 将对象转换为字符串
- 将Mat对象转换为双arr(OpenCV)