2016 - 2024

感恩一路有你

为什么要复制构造函数 为什么定义了复制构造函数就必须定义默认构造函数?

浏览量:1525 时间:2021-03-11 16:55:28 作者:admin

为什么定义了复制构造函数就必须定义默认构造函数?

此语句不正确。你正在仔细阅读这本书。如果是这样写的,那就错了。

我认为是不同的对象构造方法。默认构造函数是无参数构造,复制构造函数使用自己类型的对象

如果关系复制构造函数需要一个对象,则该对象可以与其他构造函数一起构造。当然,它可能是默认构造函数或其他构造函数

复制构造函数是构造函数的子集吗?你说得对。复制构造函数是一个构造函数。如果您提供这个,系统将不会提供默认构造函数。

我认为这句话应该说,如果一个类定义了一个复制构造函数,那么它应该(应该,不应该)定义另一个构造函数(不一定是默认的)。不定义它是可以的,但是在这种情况下,类不能构造对象,只是不能被实例化。这样的课是没有意义的,对吧。

为什么复制构造函数的形参必须是一个引用?

使用引用参数复制构造函数的一个重要原因是避免递归调用!从语言规范的角度来看,这只是一种规则。例如&B=a表示B是对a的引用。从逻辑角度看,参数的传递本身就是一个副本。如果不使用引用类型,则当复制构造函数传递参数时将调用复制构造函数,从而导致递归调用。因此,它是通过引用类型传递的。

为什么复制构造函数的形参必须是一个引用?

复制构造函数实际上是一个函数。如果将参数定义为类型而不是类型引用,它将首先调用该类型的复制构造函数并重构一个新实例,就像下面的示例类MyClass一样。这是一个简单的类{}int fun(MyClass a)//这是一个函数。调用时,编译器会自动调用MyClass类型的构造函数,并重新实例化MyClass int fun(MyClass&;AMPA)//此函数不会调用MyClass类型的构造函数,只需传递一个指针~现在回到您的问题,赋值构造函数也是一种构造函数,你给它一个非引用、非指针的参数,它会调用这种类型的构造函数,这很好~一个函数不断地调用自己,这样它就不会出错,就不会堆栈溢出了,是吗?简单来说,事情是这样的:intfun(MyClass a){fun(a)}//你认为这个函数有一天会结束吗?

为什么复制构造函数不添加explicit前缀?

关键字explicit可以阻止“单参数构造函数”用于自动类型转换(隐式类型转换)

class test{

private:

int data

public:

test(int data=0){}

test(const test&RHS){}]}

不带显式,测试s=4可以编译并通过

但是对于显式,测试(4)不是必需的

那么复制构造函数的定义是什么?也就是说,构造函数的参数属于这种类型。只要此类型的对象用于初始化同一类型的其他对象,将调用复制构造函数。

例如:

test a=4//将不在此处调用复制构造函数

test B=a//将在此处调用复制构造函数

因此复制构造函数中不存在隐式类型转换问题,所以显式是不需要的

构造函数的作用是使类的成员变量有适当的初始值。调用构造函数时,编译器会在创建类的对象时自动调用它。复制构造函数意味着类的对象在创建时可以在现有对象之间初始化。当类对象用作函数参数时,或者当类对象用作函数返回值时,作为复制机制,类型值需要自动复制。

为什么要复制构造函数 拷贝构造函数的作用是什么 复制构造函数有什么用

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。