类构造函数,重载构造函数和对象初始化

时间:2016-06-18 20:55:35

标签: c++ class constructor initialization default-constructor

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) {}),但这种情况如何正确处理?

1 个答案:

答案 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 实例。