我想重新实现一个我有头文件的库。 我宁愿不更改.h文件,因为这需要更改使用该库的程序(加上一些法律原因)。 编辑:我也无法更改使用库的代码并实例化类X!
lib.h定义了一个类X(简化版):
class X
{
public:
bool Function(BOOL q, INT p);
BOOL a;
INT b;
};
(BOOL和INT只是库使用的一些数据类型,这些类包装了原始数据类型bool和int)。
我在my_lib_implementation.cpp中实现了这个类:
bool X::Function(BOOL q, INT p)
{
return true;
}
.h文件没有定义构造函数,所以这意味着有一个隐式构造函数(对吗?)。 问题是,我需要初始化变量a和b,以便我的Function(BOOL q,INT p)实现正常工作。 但是,如果我添加以下内容,则会出现编译错误("错误:隐式声明的定义' X :: X()'"",gcc 4.4):
X::X()
{
a=true;
b=0;
}
是否有可能通过一些我不知道的魔法来重载构造函数?还有其他选项可用于初始化变量吗? 有一个库的实现(我不能使用),所以它似乎应该可能以某种方式?
本周我才开始编程C ++(我对其他语言有丰富的经验),所以这个问题可能只是我缺乏基础知识。 希望你们能帮助我!
答案 0 :(得分:3)
不,这是不可能的,编译器生成的默认构造函数不能重载。
但是,您可以使用以下语法初始化成员:
X x = {true, 0};
答案 1 :(得分:2)
没有办法直接做你所要求的。 (提供默认构造函数而不在类中声明它。)
您最接近的方法是重新定义BOOL
和INT
类,假设这些类已定义默认构造函数。如果有,那么您可以将默认值的含义更改为您想要的任何内容。
或者,您可以完全更改函数的行为。您可以向该类添加成员,包括例如跟踪函数是否已被调用的内容,或者多少次等等。或者您可以定义自己的betterthanX
成员并将函数调用转发给该成员,然后将结果复制回真实X类的成员。
答案 2 :(得分:1)
非常脏的黑客可能是在包含将X更改为X_的库头文件之前定义预处理器宏。然后,您可以定义自己的X,它继承自X_并定义您喜欢的任何构造函数。您应该在#undef
之后#include
宏。如果你遇到阴险的错误,不要怪我。