首页 > 试题广场 >

下列哪种情况会调用拷贝构造函数()

[不定项选择题]
下列会调用拷贝构造函数的情况为()
  • 用派生类的对象去初始化基类对象时
  • 将类的一个对象赋值给该类的另一个对象时
  • 函数的形参是类的对象,调用函数进行形参和实参结合时
  • 函数的返回值是类的对象,函数执行返回调用时

😥

正确答案: A C D   你的答案: B (错误)

发表于 2019-09-07 10:50:42 回复(7)

复制构造函数被调用的三种情况

l  定义一个对象时,以本类另一个对象作为初始值,发生复制构造;

l  如果函数的形参是类的对象,调用函数时,将使用实参对象初始化形参对象,发生复制构造;

l  如果函数的返回值是类的对象,函数执行完成返回主调函数时,将使用return语句中的对象初始化一个临时无名对象,传递给主调函数,此时发生复制构造。

发表于 2019-08-07 11:03:44 回复(2)
这题不严谨,B选项都有可能啊,如果是定义对象的时候用另一个对象赋值,此时调用的就是拷贝构造函数,如果是一个已经存在的对象被另一个对象赋值则调用的是重载的赋值运算符
发表于 2020-06-25 16:18:47 回复(2)
调用的是拷贝构造函数还是赋值运算符,主要是看是否有新的对象实例产生。如果产生了新的对象实例,那调用的就是拷贝构造函数;如果没有,那就是对已有的对象赋值,调用的是赋值运算符。

拷贝(复制)构造函数被调用的三种情况:
1.当用一个对象去初始化同类的另一个对象时
2.如果某函数有一个参数是类A的对象,那么该函数被调用时,类A的赋值构造函数将被调用
3.如果函数的返回值是类A的对象时,则函数返回时,A的拷贝构造函数将被调用
发表于 2020-02-21 20:11:19 回复(0)
为什么C++的题总会出现在C里?
发表于 2021-05-28 09:53:10 回复(0)
顺丰有毒
发表于 2019-08-15 12:04:10 回复(0)

拷贝构造函数和赋值函数不一样。b中如果是两个已经定义了的对象就不能用拷贝构造。如果是一个对象给一个正在定义的对象就可以用
发表于 2020-04-06 17:11:20 回复(0)
b使用了类重载的赋值运算符
编辑于 2020-03-20 09:46:31 回复(0)
Java中克隆的实现方式
1、实现Cloneable接口,实现portected Object clone();方法    
    缺点,如果被克隆的对象包含引用数据类型,克隆出的对象的引用成员变量也原始对象的引用成员变量指向同一个对象实例。
2、使用序列化实现深度克隆
    实现Cloneable和Serializable接口,自定义深度复制方法,将当前对象序列化成ByteArrayOutputStream字节流对象,然后将字节流对象读入内存,生成目标对象
ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(out);
oos.writeObject(this);
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
ObjectInputStream ois = new ObjectInputStream(in); return (myClone)ois.readObject();
3、创建复制构造方法,在创建对象的时候实现深度复制。
public User(String name,Inner inner) {
        this.name = name;
        this.inner = inner;
    }
    
    public User(User user) {
        this.name = user.name;
        this.inner = new Inner();
        inner.name = user.inner.name;
    }
参考链接:https://blog.csdn.net/shewmi/article/details/80788591
发表于 2019-09-10 11:37:28 回复(0)
赋值不是初始化,初始化会调用拷贝构造,赋值不会
发表于 2023-01-19 20:26:59 回复(0)
D选项不严谨啊,如果类支持move construct的话,rvo就会调用move构造而不是拷贝构造了啊
发表于 2022-05-24 16:07:16 回复(0)
赋值不是用它去初始化另一个对象_(:з」∠)_
发表于 2021-03-17 13:24:28 回复(0)
B确实是错的。至少对c++来说赋值和初始化差别挺大。初始化调用拷贝构造函数,赋值时候调用重载运算符。对于基本数据类型差别不大,对于类,差别很大。可以自行去实验
发表于 2021-03-03 16:03:02 回复(0)
漂亮,完美错开答案
发表于 2020-04-25 16:02:17 回复(0)
答案为bcd
发表于 2020-03-19 23:40:01 回复(0)
java有拷贝构造函数吗?不是c++吗。。。
发表于 2019-09-20 19:24:26 回复(0)