目录
1.构造函数
构造函数在以下情况被调用:
构造函数可以具有以下特点:
下面是一个简单的示例代码,展示了一个类的构造函数的定义和用法:
构造函数的特征
2.析构函数
析构函数的声明和定义如下:
以下是一个使用析构函数的示例,用于释放动态分配的内存:
放暑假了,欠了很多的帐。今天继续补!!!今天进行了构造函数和析构函数的复习。
1.构造函数
在C++中,构造函数是一种特殊的成员函数,用于在创建对象时初始化对象的数据成员。构造函数的名称与类名相同,没有返回类型(包括void
),并可以带有参数。
构造函数在以下情况被调用:
对象被创建时:当使用
new
运算符创建对象时,构造函数被自动调用。对象在栈上被声明时:当在函数内部或作为函数参数时,对象在栈上被声明并分配内存时,构造函数被自动调用。
对象作为另一个对象的成员时:当对象作为另一个对象的成员时,构造函数被调用以初始化该成员对象。
构造函数可以具有以下特点:
可以重载:一个类可以有多个构造函数,它们可以具有不同的参数列表,以允许不同的对象初始化方式。
可以有默认参数:构造函数的参数可以有默认值,这样在创建对象时可以省略相应的参数。
可以使用成员初始化列表:构造函数可以使用成员初始化列表来初始化对象的数据成员,以提供更高效的初始化方式。
下面是一个简单的示例代码,展示了一个类的构造函数的定义和用法:
class MyClass {
private:
int value;
public:
MyClass() {
value = 0; // 默认构造函数,将value初始化为0
}
MyClass(int initValue) {
value = initValue; // 带参数的构造函数,使用传入的值初始化value
}
int getValue() {
return value;
}
};
int main() {
MyClass obj1; // 调用默认构造函数
MyClass obj2(10); // 调用带参数的构造函数
cout << obj1.getValue() << endl; // 输出: 0
cout << obj2.getValue() << endl; // 输出: 10
return 0;
}
在上述示例中,MyClass
类定义了两个构造函数:一个是默认构造函数,用于将value
初始化为0;另一个是带参数的构造函数,用于接受一个参数并将其用于初始化value
。
在main()
函数中,通过创建MyClass
的对象并调用其成员函数getValue()
,可以获取对象的值并输出到控制台。
构造函数在类的实例化过程中非常重要,它使得对象的创建和初始化成为可能,确保对象在使用之前处于有效的状态。
构造函数的特征
构造函数时特殊的公有成员函数(在特殊用途中构造函数的访问限定可以定义成私有或者保护)
1.函数名与类名相同。
2.构造函数无函数返回类型说明。注意是没有而不是void,即什么也不写,也不可写void。实际上 构造函数有返回值,返回的就是构造函数所创建的对象。
3.在程序运行时,当新的对象被建立,该对象所属的类构造函数自动被调用,在该对象生存期中也 只调用这一次。
4.构造函数可以重载。严格地讲,类中可以定义多个构造函数,它们由不同的参数表区分,系统在 自动调用时按一般函数重载的规则选一个执行。
5.构造函数可以在类中定义,也可以在类中声明,在类外定义。
6.如果类说明中没有给出构造函数,则C++编译器自动给出一个缺省的构造函数:
但只要我们定义了一个构造函数,系统就不会自动生成缺省的构造函数。只要构造函数是无参的或 者只要各参数均有缺省值的,C++编译器都认为是缺省的构造函数,并且缺省的构造函数只能有一个。
在上述类的设计中,先设计的是real,然后是image。在构造函数时,虽然先给出的是image,但是在public里先构造的是real,因此在构造函数中应先执行real。
2.析构函数
在C++中,析构函数(Destructor)是一种特殊的成员函数,用于在对象生命周期结束时执行清理和资源释放操作。析构函数的主要目的是回收对象所占用的资源,例如释放动态分配的内存、关闭文件等。
析构函数的声明和定义如下:
class MyClass {
public:
// 析构函数
~MyClass() {
// 在这里进行资源释放和清理操作
}
// 其他成员函数和成员变量的声明
};
析构函数的名称与类名相同,前面带有波浪线(~
)。它没有参数,也没有返回类型。在析构函数内部,你可以编写所需的清理代码,如释放内存、关闭文件等。析构函数在对象生命周期结束时自动被调用,你不需要手动调用它。
以下是一个使用析构函数的示例,用于释放动态分配的内存:
#include <iostream>
class MyClass {
public:
int* data;
// 构造函数
MyClass(int size) {
data = new int[size];
std::cout << "构造函数被调用!" << std::endl;
}
// 析构函数
~MyClass() {
delete[] data;
std::cout << "析构函数被调用!" << std::endl;
}
};
int main() {
MyClass obj(5); // 创建对象
// 执行其他操作...
return 0;
}
在这个示例中,构造函数用于动态分配一个大小为5的整型数组,并将其地址存储在data
成员变量中。析构函数用于在对象生命周期结束时释放这块内存。当对象obj
超出作用域或程序结束时,析构函数会自动被调用,释放内存。