C++ 当参数按值发送时,为什么默认复制构造函数不调用?

C++ 当参数按值发送时,为什么默认复制构造函数不调用?,c++,oop,constructor,C++,Oop,Constructor,该程序初始化一个类的对象,并将其作为参数传递给另一个成员函数。 当我把声明 地址a2=a1; 它没有显示错误。但是当我把一个参数作为一个对象 Employeeint id、字符串名称、地址; 并称之为使用 雇员e1=雇员101,Nakul,a2; 它显示以下错误 包括 使用名称空间std; 类地址{ 公众: 字符串地址行,城市,州; Addressstring地址行、字符串城市、字符串状态 { 此->地址行=地址行; 这->城市=城市; 这个->状态=状态; } }; 班级员工 {

该程序初始化一个类的对象,并将其作为参数传递给另一个成员函数。 当我把声明

地址a2=a1; 它没有显示错误。但是当我把一个参数作为一个对象

Employeeint id、字符串名称、地址; 并称之为使用

雇员e1=雇员101,Nakul,a2; 它显示以下错误

包括 使用名称空间std; 类地址{ 公众: 字符串地址行,城市,州; Addressstring地址行、字符串城市、字符串状态 { 此->地址行=地址行; 这->城市=城市; 这个->状态=状态; } }; 班级员工 { 私人: 地址;//员工有一个地址 公众: int-id; 字符串名; Employeeint id、字符串名称、地址//此处显示错误 { 这个->id=id; 此->名称=名称; 这个->地址=地址; } 空白显示 { cout在Employee的构造函数中,成员初始值设定项列表中没有提到成员地址。然后,它将首先被默认初始化,然后在Employee的构造函数体中被分配为this->address=address;。但是address没有默认构造函数

您可以将其初始化为

然后通过复制构造函数从构造函数参数复制初始化地址。

在Employee的构造函数中,成员初始值设定项列表中没有提到成员地址。然后首先对其进行默认初始化,然后在Employee的构造函数体中分配为this->address=address;。但地址没有默认值构造器

您可以将其初始化为


然后,地址是通过复制构造函数从构造函数参数初始化的。

您实际上不使用地址参数来初始化这个->地址成员。赋值不是初始化。请阅读您喜欢的C++教科书中的构造函数初始化列表。实际上,您不使用地址参数来初始化这个->地址成员。在您最喜欢的C++教程中,请先阅读构造函数初始化列表。在调用复制构造函数之前,您的工作人员调用了地址的默认构造函数。@ PariRaju ->地址=地址;是赋值。因此,首先默认地址初始化,然后在结构中赋值。tor body by this->address=address;。复制构造函数在此不起作用。如果在成员初始值设定项列表中初始化它,则复制构造函数用于初始化地址,而不是默认初始化。因此,在调用复制构造函数之前,员工的构造函数会调用地址的默认构造函数。@PariRaju this->aaddress=address;是赋值。因此,首先默认初始化address,然后通过此->address=address;在构造函数体中赋值。复制构造函数不会在此处启动。如果在成员初始值设定项列表中初始化它,则复制构造函数用于初始化address,而不是默认初始化。
Employee(int id, string name, Address address) : address(address)
//                                               copy-initialize (via copy constructor)
{    
    this->id = id;    
    this->name = name;    
}