有关c++构造函数的问题

[复制链接]
查看11 | 回复5 | 2012-12-1 12:53:46 | 显示全部楼层 |阅读模式
B *p;
p = new B[3];
p[0] = B("man",4.8); p[1] = B("wang",3.6);
p[2] = B("lin", 3.1); 这种写法根本就是错误的, p = new B[3]这条语句有两个意思,一是分配内存空间,二是调用B的构造函数,不需要自己再显式的去调用B的构造方法, p[0] = B("man",4.8); p[1] = B("wang",3.6); p[2] = B("lin", 3.1); 即这三条语句是不需要的,去掉这三条语句因为你给B指定了一个带参的构造方法,编译器就不会产生一个不带参的构造方法,所以p = new B[3]编译的时候会...
回复

使用道具 举报

千问 | 2012-12-1 12:53:46 | 显示全部楼层
所谓的显式调用是指B.B("man", 4.8);吧,而p[0] = B("man", 4.8);这个是初始化。另外,p = new B[3];能编译通过么?你重载了构造函数之后,编译器就不会生成默认的无参构造函数了吧,这样生成的对象是未初始化的对象,编译器不会让你通过吧。...
回复

使用道具 举报

千问 | 2012-12-1 12:53:46 | 显示全部楼层
构造函数当然可以调用,谁说不能显示调用了。可以有多个构造函数,你调用哪个就是哪个,如果你不加参数,才默认调用B();这个不带参数的构造函数...
回复

使用道具 举报

千问 | 2012-12-1 12:53:46 | 显示全部楼层
构造函数式可以显示调用的啊。p[0]这句话,就是调用的有参的构造函数。new只是创建了3个B类型的数组,使用new的话,需要使用delete释放分配的空间。...
回复

使用道具 举报

千问 | 2012-12-1 12:53:46 | 显示全部楼层
隐式调用和显式调用,区别是手动和编译器调用的区别吧。带参的构造函数,可以调用。...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行