我无法找出放置我创建的重载运算符的位置。他们是否应该在他们经营的课堂上,还是在课堂上?这两种方式都给我带来麻烦。任何指针都会很棒。运算符超载C++放置
这是我非常基本的uint128_t类:
class uint128_t{
private:
uint64_t UPPER, LOWER;
public:
// constructors
uint128_t(){
UPPER = 0;
LOWER = 0;
}
template <typename T>
uint128_t(T val){
UPPER = 0;
LOWER = (uint64_t) val;
}
template <typename S, typename T>
uint128_t(const S & upper_val, const T & lower_val){
UPPER = (uint64_t) upper_val;
LOWER = (uint64_t) lower_val;
}
uint128_t(uint128_t val){
UPPER = val.upper();
LOWER = val.lower();
}
uint64_t upper(){
return UPPER;
}
uint64_t lower(){
return LOWER;
}
};
如果运营商都在类,他们工作得很好。但是,我可以做uint128_t^uint32_t
但不是uint32_t^uint128_t
。另一方面,移动外面的所有东西给我error: 'uint128_t operator=(uint128_t, T)' must be a nonstatic member function
。另外,运营商=不会为明显的常量输入工作,因为值是ULLL,这不存在,除非有人知道这样做的方式。
我该怎么办?
这个编译?它不应该。你的拷贝构造函数是非法的。它通过值来接受参数,但这是不可能的,因为除非已经有复制构造函数,否则不能通过值传递参数。它应该通过const引用来接受它的参数。实际上,你甚至不应该定义它,因为在这种情况下默认的拷贝构造函数可以正常工作。 – 2011-05-25 04:06:02