已采纳回答 / onemoo
优势就是你可以手动管理内存,可以控制堆上对象的生存时间。函数中,栈上的对象在函数结束后就会被销毁,如果你想要生成一个可以一直存在的对象,就需要将其构造在堆中。
2015-09-19
已采纳回答 / onemoo
老师并没有说错。你说的那些确实都可以作为默认构造函数,所以它们只能有一个。 因为如果存在多个,那么在需要调用默认构造函数的时候,编译器就不知道要调用哪一个了。
2015-08-23
已采纳回答 / onemoo
报的错误是什么? 错误提示都在里面,下次出错时好好看看,对找错误会有帮助的。如果你的成员函数是定义在类定义中的,则大括号后不用加分号。所以代码中拷贝构造函数的大括号后面不用加分号。 如果你是把大括号去掉了,那表明你是在类定义中声明了一个拷贝构造函数,并没有定义它,编译链接时会报未定义错误。你说你把函数定义复制到main函数中?! 函数不能嵌套定义,你这样做肯定是错的。还有这个代码中根本就没有用到拷贝构造函数。
2015-08-02
已采纳回答 / IT饱
请记住在 类 后 打:class Student{public: Student() { m_strName = ""; } Student(string _name) { m_strName = _name; } Student(const Student &stu) { } ~Student() { } void setName(string _name);...
2015-07-25
讲师回答 / james_yuan
对于具有默认构造函数的类来说,两者实例化之后的数据本质是一样的,只不过一个从堆中分配内存,一个从栈中分配内存。比如:在类中有一个成员x,如果在构造函数中有:x =10, 那么无论是Student *stu = new Student(),还是Student stu,其结果都是对象中的x被赋值了10,最后顺便说一下,你的代码写错了,第一,不能写成Student stu = new Student(),而应写成Student *stu = new Student(),第二,不能写成Student stu = ...
2015-07-23
已采纳回答 / onemoo
不加括号代表默认初始化(default initialize),类型后加上空括号代表值初始化(value initialize)。对于有构造函数的类,这两种形式都是调用其默认构造函数。没有区别。但对于built-in类型,由于没有默认构造函数,所以默认初始化会导致初值未定。而值初始化则一般会初始化为0。
2015-07-20