C++中构造函数和析构函数的区别
构造函数:
构造函数是与类名同名的类的成员函数。它有助于初始化类的对象。它可以接受或不接受参数。它用于将内存分配给类的对象。每当创建类的实例时都会调用它。它可以使用参数或不使用参数手动定义。一个类中可以有很多构造函数。它可以重载,但不能继承或虚拟。有一个复制构造函数的概念,用于从另一个对象初始化一个对象。
语法:
ClassName()
{
//Constructor's Body
}
析构函数:
与构造函数一样,析构函数也是类的成员函数,该类的名称与前面加波浪号(~) 运算符的类名相同。它有助于释放对象的内存。它在类的对象被释放或删除时调用。在一个类中,总是有一个没有任何参数的析构函数,所以它不能被重载。它总是以构造函数的相反顺序调用。如果一个类被另一个类继承并且两个类都有析构函数,则首先调用子类的析构函数,然后调用父类或基类的析构函数。
语法:
~ClassName(){
//Destuctor's Body
}
注意:如果没有为类中的成员指定任何访问修饰符,那么默认情况下,成员的访问修饰符将是 Private
。
构造函数和析构函数的示例/实现:
#include <iostream>
using namespace std;
class Z
{
public:
// constructor
Z()
{
cout<<"Constructor called"<<endl;
}
// destructor
~Z()
{
cout<<"Destructor called"<<endl;
}
};
int main()
{
Z z1; // Constructor Called
int a = 1;
if(a==1)
{
Z z2; // Constructor Called
} // Destructor Called for z2
} // Destructor called for z1
运行结果:
Constructor called
Constructor called
Destructor called
Destructor called
C++中构造函数和析构函数的区别:
构造函数 | 析构函数 |
---|---|
构造函数帮助初始化一个类的对象。 | 析构函数用于销毁实例。 |
构造函数声明为 Classname( arguments if any ){Constructor's Body } 。 |
析构函数被声明为 〜ClassName(){} 。 |
构造函数可以接受或不接受参数。 | 析构函数不能有任何参数。 |
在创建类的实例或对象时调用构造函数。 | 析构函数在类的对象被释放或删除时调用。 |
构造函数用于为实例或对象分配内存。 | 析构函数用于释放类对象的内存。 |
构造函数可以重载。 | 析构函数不能超载。 |
构造函数名与类名相同。 | 析构函数的名称也与前面带有平铺 (~) 运算符的类名相同。 |
在一个类中,可以有多个构造函数。 | 在一个类中,总是有一个析构函数。 |
有一个复制构造函数的概念,用于从另一个对象初始化一个对象。 | 析构函数没有复制构造函数的概念。 |