User a[2]=User(23,24);这种写法对数组的每一个对象调用有参数的构造函数,是功能实现最完备的形式。
User a(23,24);这种写法可以调用有参数的构造函数。
User a[2](23,24);User a(23,24)[2];均错误,无法编译。
int a=new int; User *a= new User;这种写法不初始化,仅分配内存,里面是乱码。
int a=new int(); User *a= new User();这种写法调用无参数的构造函数,也就是默认构造函数。
User *a=new User[2];User *a=new User[2]();两种等价,只能调用默认构造函数。但是可以对数组操作。
User *a= new User(23,24);任意构造函数,但是只能对单个对象。
User *a=new User[2](23,24);User *a=new User(23,24)[2];均错误,无法编译。
总结一下,最完备的写法是
User a[2]=User(23,24);可以使用任意构造函数初始化数组;但是它的缺点是,不是动态分配内存。
动态分配内存的话,也就是带new的式子,没有办法用有参数的构造函数初始化对象数组。要么得到数组,也就是
User *a=new User[2];User *a=new User[2]();要么用有参数的构造函数得到单个对象User *a= new User();无法兼得。好处是可以动态分配内存。
妥协一下的话,我们可以把要调用的构造函数去参,设为默认函数。如果不想妥协或者为了避免改代码带来的麻烦,
并且想要动态分配内存,并且用含参数的构造函数初始化数组,那么只能借助循环语句来实现了。