首页 > 试题广场 >

上面的语句序列调用构造函数个数是?

[单选题]
若MyClass是一个类名,其有如下语句序列:
MyClass c1,*c2;
MyClass *c3=new MyClass;
MyClass &c4=c1;
上面的语句序列调用构造函数个数是( )。
  • 1
  • 2
  • 3
  • 4
只有c1和c3会调用构造函数。
c2只是一个指针,用来动态描述对象的,不需要类的定义。
c4只是一个c1的别名,说白了c4就是c1  不占空间

发表于 2015-11-15 13:29:52 回复(2)
c1要调用一次构造函数;
c2只是一个指针,用来动态描述对象,不会调用类的构造函数;
c3的右边新创建一个对象会调用构造函数。但是注意,这里的赋值运算符不是类中的赋值运算符,而是普通的赋值运算符;
c4是一个对象引用,是c1的一个别名,所以不会调用构造函数。
发表于 2016-05-23 16:59:46 回复(0)
MyClass c1;
MyClass *c2;
MyClass *c3=newMyClass;
MyClass &c4=c1;
只要类的对象被创建,就会执行构造函数。
第1行:创建对象c1,调用了构造函数;
第2行:声明了一个指向MyClass类型的指针,未调用构造函数;
第3行:new MyClass在内存中创建了一个对象,并把对象地址赋给指针c3,创建对象调用了构造函数;
第4行:将c4声明为引用,并将c1赋给它,即c4只是c1的一个引用,未调用构造函数。
B
发表于 2016-08-26 15:58:40 回复(3)
B

c1  c3 调用的。c2指针,c4还是c1这个对象。
发表于 2015-11-19 18:47:33 回复(0)
new运算符可以分成三步: 1.开辟堆区空间; 2.调用构造函数初始化该内存; 3.返回该内存指针; 因此,会调用构造函数。 同理,delete运算符须调用析构函数。
发表于 2022-08-18 08:11:23 回复(3)
Myclass* c3=New Myclass();
我觉得这个语句在等号的右边会执行默认构造函数创建一个临时对象,再通过赋值构造函数把临时对象传递给左边,因此这个语句会有两次调用构造函数。为什么答案认为只有一次呢?
编辑于 2016-05-08 09:56:01 回复(4)

c1和c3各一次。
c2是指针,没有具体指向,对象未创建,不调用构造。
c4是c1的别名。两者对应同一块内存,不调用构造。

编辑于 2020-06-10 21:08:36 回复(0)
myclass c1是构造函数;*c2是指针;MyClass *c3=new MyClass 是构造了一个newclass函数,并且把对象地址赋值给了c3;
发表于 2022-10-15 20:55:46 回复(0)
Myclass &c1=c2的意思是c1是c2的别名,二者是一个东西
发表于 2020-09-23 10:20:04 回复(0)
我感觉第二句MyClass *c3=new MyClass;也不会调用构造函数。

MyClass *c3=new MyClass();会调用默认构造函数进行类的初始化;
但MyClass *c3=new MyClass;没有(),则不会进行初始化。不会调用默认的构造函数。
发表于 2020-09-13 18:16:17 回复(0)
复制构造函数 赋值运算符
发表于 2017-08-03 09:09:52 回复(0)
c++申明构造函数的三种方式
  1. class A
  2. {
  3. private :
  4. int n;
  5. public :
  6. A(int m):n(m)
  7. { }
  8. ~A(){}
  9. };
  10. int main()
  11. {
  12. A a(1); //栈中分配
  13. A b = A(1); //栈中分配
  14. A* c = new A(1); //堆中分配
  15. delete c;
  16. return 0;
  17. }
编辑于 2017-07-04 21:29:10 回复(0)
C2是没有分配内存的指针,所以不用初始化 C4引用只是引用对象的别名,不占内存
发表于 2017-05-04 21:29:09 回复(0)
只有在创建度对象的时候才会调用构造函数 1、3会调用构造函数 2是声明一个指针 4是一个引用
发表于 2016-12-25 13:33:25 回复(0)
做错的同学,是不是和我一样,把第3个当成拷贝构造函数了,,,,,看清啊,是个&,不是直接给引用,要是直接给,那该多好啊。。。
发表于 2016-11-14 17:43:40 回复(0)
MyClass &c4=c1;这只是引用,只是一个别名;没有构造过程

发表于 2016-08-02 14:42:44 回复(0)
c1要调用一次构造函数;
c2只是一个指针,用来动态描述对象,不会调用类的构造函数;
c3的右边新创建一个对象会调用构造函数。但是注意,这里的赋值运算符不是类中的赋值运算符,而是普通的赋值运算符;
c4是一个对象引用,是c1的一个别名,所以不会调用构造函数。
发表于 2016-06-05 11:20:55 回复(0)
c1没有调用new啊,只是一个引用而已,怎么会调用了构造函数
发表于 2016-03-05 17:50:43 回复(0)