对象初始化
-
1 类的4个常见的构造函数
-
- 1.1 类对象初始化的3个函数
-
-
-
1.1.1 默认构造函数
FunctionClass(int data = 10) :m_data(data) {cout << "FunctionClass(int)" << endl; }
-
-
-
-
-
1.1.2 拷贝构造函数
FunctionClass::FunctionClass(const FunctionClass& other) {m_data = other.m_data; } // 当有新对象生成时,调用拷贝构造函数。
-
-
-
-
-
1.1.3 函数运算符重载(= 赋值运算符)
FunctionClass& FunctionClass::operator=(const FunctionClass& other) {// TODO: 在此处插入 return 语句m_data = other.m_data;return *this; } // 当没有新对象生成时,调用赋值函数 // 当使用临时对象为已有对象赋值时,先创建临时对象,再为已有对象赋值。
-
-
-
2 编码实践
FunctionClass f1; // 创建FunctionClass类的对象 f1FunctionClass f2(); //声明一个函数f2, 其返回对象类型为 FunctionClass
静态数组, 动态数组, 指针数组, 数组指针
-
-
- 静态数组
// 创建一个对象数组,其大小为2,会分别执行5次构造函数和析构函数。 // 静态对象数组:数组和其中的对象,都存储在栈内存(stack)中FunctionClass f_array[2];
-
-
-
- 动态数组
-
// 创建一个FunctionClass类型的指针,指向1个临时数组,数组中存储有2个临时对象,存储在堆上,程序退出时,不会调用析构函数。// 动态对象数组,数组和其中的对象都存储在堆内存(heap)中。FunctionClass* f_array_2 = new FunctionClass[2]; //delete f_array_2; // 错误,f_array_2 是一个指向数组的指针。delete[] f_array_2;
~~~- - - **指针数组**
```C++// 指针数组, 指针数组是局部变量,存储在栈内存中,指针数组中的元素存储在堆内存中,需要显式删除。// 数组指针,指向一个数组的指针FunctionClass* f_array3[2]; // 定义一个指针数组,其元素为指针for ( int i = 0; i < 2; i++){f_array3[i] = new FunctionClass();}for (int i = 0; i < 2; i++){delete f_array3[i];}
函数参数
-
形参 形参是函数定义时使用的参数,它们充当函数的局部变量,用于接收调用函数时传递的值。形参在函数定义时声明。
-
实参 实参是函数调用时传递给函数的实际参数。它们是函数调用时传递给形参的值或引用。实参的类型和个数应与形参相匹配。
-
按值传递(pass-by-value):将实参的值传递给形参,形参是实参的副本,函数内部对形参的修改不会影响实参。
-
按引用传递(pass-by-reference):将实参的引用传递给形参,函数内部修改形参会影响实参。
-
按指针传递(pass-by-pointer):通过指针将实参的地址传递给形参,函数可以通过指针修改实参。
// 按值传递(pass-by-value):将实参的值传递给形参,形参是实参的副本,函数内部对形参的修改不会影响实参。
FunctionClass get_object1(FunctionClass other)
{int data = other.get_data();FunctionClass tmp(data);return tmp;
}FunctionClass f3;FunctionClass f4;f4 = get_object1(f3);
~~~
![File005](file005.png)```C++
//按引用传递(pass - by - reference):将实参的引用传递给形参,函数内部修改形参会影响实参。
FunctionClass get_object2(FunctionClass& other)
{int data = other.get_data();return FunctionClass(data);
}FunctionClass f5;FunctionClass f6;f6 = get_object2(f5);
- 声明对象是指告诉编译器该对象的名字和类型,但并不为该对象分配内存。声明对象通常出现在头文件中,或者在函数外部进行作用域声明。声明对象不会创建对象的实例,也不为对象分配内存空间。
- 定义对象是指创建对象的实例,并为其分配内存。定义对象不仅仅是声明对象,还包括为该对象分配内存,初始化对象的成员变量,以及执行对象的构造函数(如果有的话)。定义对象通常出现在源文件中(.cpp 文件)。