在c++中,可以通过更改类声明来更改成员函数的参数类型吗?

In C++, Can I change the argument type of a member function with changing the class declaration?

本文关键字:函数 参数 类型 成员 声明 c++ 可以通过      更新时间:2023-10-16

这可能吗?所以这个成员函数的变化从外部看是不可见的。我想可能不会,但我想确认一下。谢谢!

添加信息:

class foo{
    private:
        A ();
        B (int b);
}
foo::A(){
    int b;
    B (b);
}
foo::B(int b){
    return (b > 1);
}

现在我想把B()的实现改成:

foo::B(float b){
    return (b > 1.0);
}

是否有任何方法可以保持类foo的声明不变,当做

foo foo1;
foo1.A() 

可以正常工作吗?

是否可以保持类foo的声明不变

。您必须更新foo::B()的声明以匹配它的新实现。

同样,您的代码将不会像所示那样编译,因为A()不是公共的,并且A()B()都没有返回值定义。

试试这个:

foo。

class foo{
    public:
        void A ();
    private:
        bool B (float b);
};

foo.cpp

#include "foo.h"
void foo::A(){
    int b;
    B (b);
}
bool foo::B(float b){
    return (b > 1.0);
}

如果你想隐藏B()的外部世界,不要把它声明为foo的成员,事实上,甚至不要在foo的头文件中声明它:

foo。

class foo{
    public:
        void A ();
};

foo.cpp

#include "foo.h"
static bool B(float b){
    return (b > 1.0);
}
void foo::A(){
    float b;
    B (b);
}

回答你的问题,定义必须匹配声明,所以只改变定义(实现)的签名(名称,返回类型,参数类型)而不改变声明将给你一个编译器错误。

然而,就像我在评论中所说的,您可以将参数类型更改为float,并且在大多数情况下它仍然可以工作(取决于您传递给函数的值的范围)。如果你想根据传递的是int还是float来执行不同的操作,你也可以添加一个重载函数。

也可以使用模板