Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi绝对值(C+)+; C++中有没有与Delphi的代码>绝对值/代码>等价的?我想做以下工作: // Structure A struct A { double X; double Y; double Z; } // Structure B struct B : A { double U absolute X; double V absolute Y; double W absolute Z; }_C++_Delphi - Fatal编程技术网

Delphi绝对值(C+)+; C++中有没有与Delphi的代码>绝对值/代码>等价的?我想做以下工作: // Structure A struct A { double X; double Y; double Z; } // Structure B struct B : A { double U absolute X; double V absolute Y; double W absolute Z; }

Delphi绝对值(C+)+; C++中有没有与Delphi的代码>绝对值/代码>等价的?我想做以下工作: // Structure A struct A { double X; double Y; double Z; } // Structure B struct B : A { double U absolute X; double V absolute Y; double W absolute Z; },c++,delphi,C++,Delphi,我可以在structure B中使用double&U=X,但这将生成一个额外的指针并更改结构的大小。我认为,联合也不是一个解决方案,因为结构B继承了结构a 我真正想要的是通过访问例如X或U来访问相同的内存。简短版本:没有与所描述的语言功能等效的功能 长版本C++: C++中没有等价物。您建议的成员引用提供了相同的语法,但实际上增加了对象的大小 另一个接近的替代方法是返回引用的成员函数。这没有开销(假设内联扩展)。函数调用的语法与引用成员的语法不同。但是,也许使用与成员访问相同的语法并不重要,

我可以在
structure B
中使用
double&U=X
,但这将生成一个额外的指针并更改结构的大小。我认为,联合也不是一个解决方案,因为
结构B
继承了
结构a


我真正想要的是通过访问例如X或U来访问相同的内存。

简短版本:没有与所描述的语言功能等效的功能


长版本C++:

<> C++中没有等价物。您建议的成员引用提供了相同的语法,但实际上增加了对象的大小

另一个接近的替代方法是返回引用的成员函数。这没有开销(假设内联扩展)。函数调用的语法与引用成员的语法不同。但是,也许使用与成员访问相同的语法并不重要,所以我建议这样做


长版本C:

在C中根本没有继承,因此也没有类似于所描述的“绝对”的东西

我们有几种坐标。其中一些被命名为x、y、z,其他(在另一个系统中)被命名为u、v、w

在这种情况下,我建议使用联合(编辑:最好交换联合和结构关系,请参见):


如果要交替使用XYZ和UVW,可以让它们相互转换

// forward declare
struct B;

struct A
{
  double X;
  double Y;
  double Z;
  operator B() const;
}

struct B
{
  double U;
  double V;
  double W;
  operator A() const;
}

A::operator B() const { B b; b.U = X; b.V = Y; b.W = Z; return b; }
B::operator A() const { A a; a.X = U; a.Y = V; a.Z = W; return a; }

我喜欢用户2079303的答案,但我想反过来

注意-该问题命名错误,违反了“你真正的目标是什么”或“向我展示你的Z”规则。我们不需要模仿
absolute
关键字-这完全是胡说八道!我们希望为记录属性制作笔名,并将其互换使用

我真正想要的是通过访问例如X或U来访问相同的内存

引用的一行是问题中唯一一行谈论问题本质的一行——使用完整的笔名

所以,让我们从user2079303停止的地方开始,使用C的联合不必命名的事实,就像在

所以我们只需要反转作用域

/*union*/ struct coordinates {
    /*struct*/ union {
        double X;
        double U;
    };
    /*struct*/ union {
        double Y;
        double V;
    };
    /*struct*/ union {
        double Z;
        double W;
    };
};

这到底有什么好处?为什么不使用返回对正在“隐藏”的成员的引用的函数呢
double&X(){return A;}
问题是我们有几种坐标。其中一些被命名为x、y、z,其他(在另一个系统中)被命名为u、v、w。为了让代码易于理解,我们需要正确命名它们。结构A也有很多功能。我想在结构B中也有这个功能。@Simon:Getter和setter可以做到这一点。你说得对:-)。但问题是我不能像标准会员那样访问它们。我必须给getter和setter指定不同的名称,不能直接赋值。我必须通过u~()和StIGuu(value)访问它们……这不仅是C++中不可能的,而且在Delphi中是不可能的。除了在声明局部变量或全局变量时,您不能在任何地方使用
绝对值
。在记录或类中声明字段时,绝对不能使用
absolute
。这甚至不是关于解决方案,而是关于解决方案的实现细节。类似于“我在中掌握了锤击钉子。现在可以使用哪种锤子以及如何锤击螺钉”,我更愿意保护
a
的成员,只提供正确命名的成员函数,返回对继承类/结构中这些成员的引用。使用c并集相当于Delphi变体记录<代码>类型A=false的记录大小写布尔值:(x,y,z:Double);真:(u、v、w:双);结束在Delphi中不可能在记录或类中使用绝对关键字。你几乎做到了:-)啊,这比我的建议好得多@USER 2079303,我对C++了解甚少,例如,我想知道内部结构是否也可以是匿名的,从而提升它们的成员在命名空间上。如果你在答案中找出两个标识符,它是否会编译?例如,结构(类)在C++中可能不是匿名的,就像C中的(虽然有些编译器支持它作为语言扩展)。允许匿名成员工会。所以,去掉这个名字会使我的答案和这个一样有用,但只在C中有效。。。他们不得不让其中一个匿名者生存下来,才能让这个把戏可行。他们选择了另一个……我想知道,
并集{double X,U;}
是相同的还是退化的一个选项并集。
/*union*/ struct coordinates {
    /*struct*/ union {
        double X;
        double U;
    };
    /*struct*/ union {
        double Y;
        double V;
    };
    /*struct*/ union {
        double Z;
        double W;
    };
};