gpt4 book ai didi

c++ - 基方法/运算符在派生(C++)上调用时返回基类型?

转载 作者:太空狗 更新时间:2023-10-29 20:45:18 29 4
gpt4 key购买 nike

给定:

class Base:
{
public:
...
Base operator+( const Base& other );
Base& scale( float num );
}

class Derived : public Base:
{
public:
...
Derived( const Base& other );
float super_math_wizardry();
}

//A user can do the following:

Base b1,b2,b3;
Derived d1,d2,d3;

b3 = b1 + b2;
d3 = d1 + d2;

b3 = b1.scale( 2.0f );
d3 = d1.scale( 3.0f ); //scale returns Base& type that is converted to Derived

float x,y;

x = (d1+d2).super_math_wizardry(); //compiler type error since d1+d2 returns Base type
y = (d1.scale(4.0f)).super_math_wizardry(); //similar compiler error

x = Derived(d1+d2).super_math_wizardry(); //works
y = Derived(d1.scale(4.0f)).super_math_wizardry(); //works

有没有一种方法可以使前两个语句工作而无需重新实现 Derived 中的每个 Base 方法(创建调用 Base 方法并返回 Derived 类型的 Derived 方法)并且不需要用户进行强制转换/调用复制构造函数?

编辑:所有 Derived 对象都在 Base 对象集中(类继承需要),但并非所有 Base 对象都在 Derived 对象集中。它们具有相同的数据成员,但 Derived 对象具有分配给这些数据成员之一的常量值(所有 Derived 对象具有相同的常量值)。

有许多特定于 Base 或 Derived 的方法,但大多数运算符和 set/get 访问器在 Base 和 Derived 对象上具有相同的定义行为。我要做的是当我在 Derived 对象上调用 Base 方法时获取 Derived 或 Derived& 返回(因为这些操作在数学上定义为这样做),同时在调用 Base 方法时仍然获取 Base 或 Base&在 Base 对象上。

上下文:Base 是 Matrix 类,Derived 是 Vector(列)类。 Derived( const Base& other ) 构造函数用于从单列 (nx1) 矩阵中显式获取 Vector。

所以我想:

x = (d1+d2).super_math_wizardry(); //works
y = (b1+b2).super_math_wizardry(); //fails (although possibly at run-time since a nx1 Matrix is a column vector)

最佳答案

鉴于您的上下文,我认为您遇到的根本问题是通知编译器 Derived 对象集在 operator+ 下关闭。我知道,你也知道,但在 C++ 语言中没有专门的快捷方式来表达它。您确实需要实现 Derived Derived::operator+(const Derived&) const

我可能会让 Derived(const Base &other) 构造函数显式。据推测,如果 other 的维度错误,它会抛出异常,因此这不是用户应该期望隐式发生的事情。他们需要知道这是正确的,所以他们还不如说他们希望它发生。

关于c++ - 基方法/运算符在派生(C++)上调用时返回基类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11003038/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com