【发布时间】:2011-09-22 10:07:36
【问题描述】:
我有一个从 Float32_base 派生的 Float32 类
类 Float32_base { 民众: // 构造函数 Float32_base(float x) : value(x) {}; Float32_base(void) : value(0) {}; 运算符 float32(void) {返回值;}; Float32_base 运算符 =(float x) {value = x;返回 *this;}; Float32_base 运算符 +(float x) const { 返回值 + x;}; 受保护: 浮点值; } 类 Float32:公共 Float32_base { 民众: 浮动泰德(){ 返回值 + .01; } } int main() { Float32 x, y, z; x = 1; y = 2; // 不会编译! z = (x + y).Tad(); // 编译成功 z = ((Float32)(x + y)).Tad(); }问题是 + 运算符返回一个 Float32_base 并且 Tad() 不在该类中。但是“x”和“y”是 Float32 的。
有没有一种方法可以让我在第一行编译代码,而不必像在下一行那样使用类型转换?
【问题讨论】:
-
Tad()在Float32类中是私有的。您是否在某处错过了public?单独的Float32和Float32_base类有什么意义?在我看来,您可以将所有内容放在一个Float32类中,并让它以完全相同的方式工作。 -
在这种情况下,您可以简单地在
Float32中覆盖operator+。想必你的真实情况比这复杂? -
类“Float32”旨在特定于平台。 Tad() 在不同的平台上是不同的。我想为浮动可以做的所有一般事情使用基类“Float32_base”,但将特定于平台的代码放在“Float32”中。
-
你的代码还能用吗?你的
operator+有签名Float32_base(float),那么如何添加x + y?float没有演员表运算符?!另外,float32是什么? -
很抱歉,如果这篇文章中的代码错误或不完整。它确实有效,但在这里展示的太多了。
标签: c++ inheritance polymorphism class-design