小编Izz*_*zzy的帖子

为什么覆盖方法并将const添加到参数类型有效?

考虑以下示例:

#include <iostream>
#include <string>

class Base {
public:
    virtual void func(int a) {}
};

class Derived : public Base {
    public:
    void func( const int a) override {
    }
};


int main()
{
    Derived d;
    d.func(1);

    return 1;
}

Run Code Online (Sandbox Code Playgroud)

我重写了该func方法,但将const添加到参数中,在这种情况下,链接器应发出错误消息。函数不被覆盖,或者函数参数不应为const。

但是令我惊讶的是,此代码可以链接并起作用。

您可以在此处找到在线示例

我想念什么吗?为什么此代码有效?

尽管类似于带有const参数并重载的函数,但它解决了一个不同的问题。这个问题是关于不可能重载基类的方法,而这个问题解决了能够覆盖派生方法的问题。

c++

6
推荐指数
1
解决办法
134
查看次数

Union float和int

我有点困惑.在开发基于预定义参数的一个函数期间,根据它们的类型传递给sprintf函数所需的精确参数,我发现了非常奇怪的行为(类似于"这是%f%d示例",typeFloat,typeInt).

请查看以下剥离的工作代码:

struct Param {
 enum { typeInt,    typeFloat   } paramType;
 union {
    float f;
    int i;
 };
};

int _tmain(int argc, _TCHAR* argv[])
{
 Param p;
 p.paramType = Param::typeInt;
 p.i = -10;

 char chOut[256];
 printf( "Number is %d\n", p.paramType == Param::typeInt ? p.i : p.f );
 printf( "Number is %f\n", p.paramType == Param::typeInt ? p.i : p.f );
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的预期产量将是 printf( "Number is %d\n", p.paramType == Param::typeInt ? p.i : p.f );

Number is -10
Run Code Online (Sandbox Code Playgroud)

但它确实打印出来了

Number …
Run Code Online (Sandbox Code Playgroud)

c++ unions visual-studio-2012

2
推荐指数
1
解决办法
2484
查看次数

划分两个浮点数并不能给出确切的结果

我分为9501/100.0f期望得到95.01f的结果,但由于一些不正常的原因,结果是95.01000000002f.

我知道舍入错误,并且划分两个较大的浮点数会产生不正确的结果,但这两个数字相对较小,它们不应该给出错误的答案.

我已将浮动更改为双打,但只能看到相同的结果.

所以我的答案是,为什么我看到这个错误的输出?

并最终解决方法,而无需将数字复制到字符串和返回.

c++ precision double

1
推荐指数
1
解决办法
175
查看次数

标签 统计

c++ ×3

double ×1

precision ×1

unions ×1

visual-studio-2012 ×1