对象作为形式参数时会调用构造函数吗
时间: 2023-10-04 10:09:06 浏览: 45
当你将一个对象作为参数传递给一个函数时,如果这个参数是以值传递(pass by value)的方式传递的,那么会调用对象的拷贝构造函数来创建一个副本。如果这个参数是以引用传递(pass by reference)的方式传递的,那么不会调用构造函数,而是直接使用传递进来的对象的引用。需要注意的是,如果你在函数中修改了这个对象,那么原始对象也会被修改。
相关问题
C++调用构造函数的情形
在C++中,构造函数是用于创建对象并初始化其成员变量的特殊成员函数。构造函数在以下情况下被调用:
1. 对象的创建:当使用类名声明一个对象时,会自动调用构造函数来创建对象并初始化其成员变量。
2. 对象的复制:当使用一个已存在的对象初始化另一个对象时,会调用拷贝构造函数。例如,通过赋值、传递参数或返回对象时。
3. 对象的临时创建:当创建一个临时对象时,会调用构造函数。临时对象通常用于表达式求值或作为函数返回值。
4. 对象的数组创建:当创建一个对象数组时,会调用构造函数来初始化数组中的每个元素。
5. 派生类的构造函数:当派生类的对象被创建时,会先调用基类的构造函数,然后再调用派生类自身的构造函数。
6. 显式调用:可以通过显式调用构造函数来创建对象,使用类名后跟括号和参数列表的形式。
派生类构造函数调用顺序
派生类构造函数的调用顺序如下:
1. 调用基类构造函数,调用顺序按照它们的继承时声明的顺序。
2. 调用内嵌成员对象的构造函数,调用顺序按照它们在类中声明的顺序。
3. 执行派生类的构造函数体中的内容。
派生类只能使用构造函数初始化列表的方式,向基类与成员变量的构造函数传递参数完成初始化工作。具体形式如下:
```python
class DerivedClass(BaseClass):
def __init__(self, args):
BaseClass.__init__(self, args)
self.member1 = Member1(args)
self.member2 = Member2(args)
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)