从C++ tutorial,章节类(I),重载构造函数:
但是这个例子还引入了一种特殊的构造函数:默认构造函数。默认构造函数是不带参数的构造函数,它是特殊的,因为在声明对象但未使用任何参数初始化时调用它。在上面的示例中,为rectb调用默认构造函数。请注意,如果使用一组空括号来构造rectb,实际上,空括号不能用于调用默认构造函数:
Rectangle rectb; // ok, default constructor called
Rectangle rectc(); // oops, default constructor NOT called
这是因为空的括号集会使rectc成为函数声明而不是对象声明:它将是一个不带参数的函数,并返回Rectangle类型的值。
所以,据我所知:
class someclass {
public:
someclass() {
std::cout << "Default constructor" << std::endl;
}
someclass(int arg) {
std::cout << "Constructor that uses passed argument (" << arg << " in this case)" << std::endl;
}
};
int main() {
someclass object1;
//outputs "Default constructor"
someclass object2(1294);
//outputs "Constructor that uses passed argument (1294 in this case)"
}
但是如何定义一个被称为someclass object();
的构造函数?我的想法是someclass(void) {}
(对此不确定)或使用参数的默认值(someclass(int arg = 1294) {}
),但这种情况如何正确处理?
答案 0 :(得分:0)
你可以使用冗长的构造方式:
function mouseClick(event){
// var pointer = canvas.getPointer(event.e);
// console.log(pointer.x);
// console.log(pointer.y);
//console.log(ob.get('componentId'));
var curSelectedObjects = canvas.getActiveObject('src');
console.log(curSelectedObjects);
console.log(canvas.getActiveObject().get('type'));
//canvas.forEachObject(function (ob) {
// var curSelectedObjects = canvas.getActiveObject(ob.get('componentName'));
//console.log(curSelectedObjects);
//
//log('Given Position - ' + ob.get('position') + '; ' + 'Assigned Position - ' + canvas.getObjects().indexOf(ob));
//positionLog(ob.get('componentName') + ' - ' + ob.get('degree') +' : ' + ob.get('position') + '; ' + 'Assigned Position - ' + canvas.getObjects().indexOf(ob));
//log(ob);
// });
// canvas.forEachObject(function (ob) {
// if (ob.get('degree') == angle) {
// console.log(ob.get('componentId'));
// // ob.opacity = 0.3;
// //if (ob.get('componentId') == 'C_'+cId) {
//// ob.opacity = 1;
//// }
// }
// });
}
someclass object1 = someclass();
将不会调用,因为编译器认为它是一个不带参数的函数声明并返回 someclass 实例。