C++ 构造函数和析构函数之间的区别
在本文中,我们将了解C++编程语言中构造函数和析构函数的比较。从本文中我们将学到的第一件事是构造函数和析构函数的基本概念。然后,我们将学习C++编程中构造函数和析构函数的各种比较。
什么是C++
C++是C的扩展集,因为它支持面向过程和面向对象的编程语言。它是中级语言。它具有封装、继承、抽象、数据隐藏、构造函数和析构函数等各种特性。
C++中的构造函数
构造函数是一个具有与类名相同的特殊成员函数。它在创建类的对象时自动调用。
语法:
以下是C++中构造函数的语法。
class class_name
{
……….
public
class_name ([parameter list])
{
……………….
}
};
在上面给出的语法中,class_name是构造函数的名称,public是一个访问说明符,参数列表是可选的。
构造函数示例
#include <iostream.h>
#include <conio.h>
using namespace std;
class hello { // The class
public: // Access specifier
hello () { // Constructor
cout << "Hello World! Program in C++ by using Constructor";
}
void display() {
cout <<"Hello World!" <<endl;
}
};
int main() {
hello myObj; /
return 0;
}
在C++中有四种类型的构造函数。
- 默认构造函数
- 动态构造函数
- 带参数的构造函数
- 拷贝构造函数
默认构造函数: 构造函数是一个不接受参数的类,称为默认构造函数。如果一个类没有构造函数,编译器会隐式创建一个默认构造函数。
以下是默认构造函数的语法 :
class class_name {
private:
………..
………..
public:
class_name ()
{
…….
}
}
在这种类型的构造函数中,没有参数和参数列表。
如果在类中没有定义构造函数,编译器会自动创建类的默认构造函数。
示例:
class student {
private:
………..
………..
public:
student ()
{
…….
}
}
下面是一个学生类的默认构造函数:
hello::hello()
参数化构造函数: 构造函数是一个可以接受参数的类,被称为参数化构造函数。它用于使用不同的值初始化对象。
参数化构造函数的语法如下所示。
Class classname
{
…………;
…………;
Public:
Class name (parameter list)
{
………….;
}
};
在这里,我们可以定义构造函数的参数列表。
拷贝构造函数: 用于创建现有对象的特定构造函数。拷贝构造函数用于从相同类型的另一个对象初始化对象。
语法:
拷贝构造函数的语法如下所示。
Class (classname, &object)
{
………….;
………….;
}
在上述语法中,对象是指用来初始化另一个对象的东西。
动态构造函数: 这种类型的构造函数可以在创建对象时分配内存。对象创建后的数据成员可以被初始化,称为动态初始化。
C++中的析构函数
析构函数具有与类名相同的名字前面加上(~)波浪号符号。它删除并销毁构造函数在对象创建时分配的内存。
语法:
C++中析构函数的语法如下所示。
class class_name
{
…………….;
…………….;
public:
xyz(); //constructor
~xyz(); //destructor
};
在C++编程中,我们使用波浪线符号来定义析构函数。
析构函数没有参数,也不返回任何值,因此无法进行重载。
析构函数示例
#include <iostream.h>
#include <conio.h>
using namespace std;
class Hello {
public:
//Constructor
Hello () {
cout<< "Constructor function is called" <<endl;
}
//Destructor
~Hello () {
cout << "Destructor function is called" <<endl;
}
//Member function
void display() {
cout <<"Hello World!" <<endl;
}
};
int main(){
//Object created
Hello obj;
//Member function called
obj.display();
return 0;
}
C++编程中构造函数和析构函数的区别
下表介绍了C++编程语言中构造函数和析构函数的各种区别:
基础 | 构造函数 | 析构函数 |
---|---|---|
使用目的 | 为了给对象分配内存,我们使用了c++中的构造函数。 | 为了释放构造函数为此分配给对象的内存,我们使用c++中的析构函数的概念。 |
参数 | 它可以包含也可以不包含参数。 | 不能包含参数。 |
调用 | 每当创建类的对象时,它就会自动调用。 | 每当程序终止时,都会自动调用。 |
内存 | 构造函数占用内存。 | 析构函数释放内存。 |
返回类型 | 它有返回类型。 | 它没有任何返回类型。 |
符号 | 在c++编程语言中声明构造函数时,对特殊符号没有要求。 | 在c++编程语言中声明析构函数时,需要一个特定的符号,即波浪线符号。 |
在数字中 | ,我们可以在程序中使用多个构造函数。 | 我们不能在程序中使用多个析构函数。 |
继承 | 它可以被继承。 | 不能继承。 |
重载 | 它可以重载。 | 不能过载。 |
执行顺序 | 它们按连续顺序执行。 | 它们按照构造函数的逆序执行;基本上,它们是构造函数的逆函数。 |
类型 | 构造函数有四种类型: 默认构造函数 复制构造函数 参数化构造函数 动态构造函数 |
析构函数没有类。 |
下面的声明用于创建构造函数:
class class_name
{
……….
public
class_name ([parameter list])
{
……………….
}
};
下面的声明用于创建析构函数:
class class_name
{
…………….;
…………….;
public:
~xyz();
{
…………
};