有一个名为main.cpp的c ++文件。
的main.cpp
#include "addition.h"
#include <iostream>
int main(){
int x=2;
int y=3;
std::cout<<getsum(x,y);
}
此文件包含名为 addition.h
的自定义头文件addition.h
#include "my_adders.h"
namespace{
int getsum(int a,int b){
return calculate_addition_h(a,b);
}
}
my_adders.h
#include <maths.h>
int calculate_addition_h(int p, int q){
int sum=0;
//Fn definitions
return sum;
}
在main.cpp中, 我需要覆盖calculate_addition_h函数的定义。
有可能吗?
我尝试复制calculate_addition_h定义以及main.cpp中的声明。但是,当我打印o / p时,my_adders.h中的calculate_addition_h方法被调用,而不是main.cpp中的那个。
请注意:我不能对addition.h或my_adders.h进行任何更改。
感谢任何帮助!
答案 0 :(得分:2)
原来可以在不改变任何标题和预处理器魔法的情况下实现!
由于您的getsum
位于未命名的命名空间中,您可以在之前的未命名命名空间中定义calculate_addition_h
函数,包括addition.h:
<强>的main.cpp 强>
namespace
{
int calculate_addition_h(int p, int q)
{
return 666;
}
}
#include "addition.h"
#include <iostream>
int main(){
int x=2;
int y=3;
std::cout<<getsum(x,y);
}
在C ++中,同一名称空间中的函数优先于父名称空间中的函数。在这种情况下,父命名空间是全局命名空间。
答案 1 :(得分:0)
当您使用全局函数时,无法覆盖该函数,因为它可以在class
中完成。最好在不同的namespace