C++教程-C++Constructor和Destructor的区别
Constructor和Destructor在C++中的区别
构造函数和析构函数是C++编程语言中的两个重要概念。本文将比较构造函数和析构函数,并首先介绍它们的基本概念,然后讨论它们在C++编程中的各种比较。
什么是C++?
C++是C的超集,因为它支持过程导向和面向对象的编程语言。它是一种中级语言。它具有封装、继承、抽象、数据隐藏、构造函数和析构函数等各种特性。
构造函数是什么?
构造函数是具有与类名相同的特殊成员函数。它在创建类的对象时自动调用。
语法:
C++中构造函数的语法如下所示:
class 类名
{
……….
public
类名 ([参数列表])
{
……………….
}
};
在上述语法中,类名是构造函数的名称,public是访问修饰符,参数列表是可选的。
构造函数的示例:
#include <iostream>
using namespace std;
class Hello { // 类
public: // 访问修饰符
Hello () { // 构造函数
cout << "Hello World! Program in C++ by using Constructor";
}
void display() {
cout <<"Hello World!" <<endl;
}
};
int main() {
Hello myObj;
return 0;
}
在C++中有四种类型的构造函数:
- 默认构造函数
- 动态构造函数
- 带参数的构造函数
- 拷贝构造函数
默认构造函数:如果一个类没有构造函数,编译器会隐式创建一个默认构造函数。
默认构造函数的语法如下:
class 类名 {
private:
………..
………..
public:
类名 ()
{
…….
}
}
在这种类型的构造函数中,没有参数和参数列表。
如果类中没有定义构造函数,编译器会自动创建类的默认构造函数。
示例:
class student {
private:
………..
………..
public:
student ()
{
…….
}
}
类student的默认构造函数如下:
hello::hello()
带参数的构造函数:带有参数的构造函数被称为带参数的构造函数。它用于使用不同的值集初始化对象。
带参数的构造函数的语法如下:
class 类名
{
…………;
…………;
public:
类名 (参数列表)
{
………….;
}
};
在这种构造函数中,我们可以定义构造函数的参数列表。
拷贝构造函数:用于从同一类型的另一个对象初始化对象的特殊构造函数。拷贝构造函数用于初始化另一个对象。
语法:
拷贝构造函数的语法如下。
类名 (类名 &对象)
{
………….;
………….;
}
在上述语法中,对象是用于初始化另一个对象的对象。
动态构造函数:这种类型的构造函数可以在创建对象时分配内存。在创建对象后,可以动态初始化对象的数据成员。
析构函数是什么?
析构函数与类名之前有相同的名称和(~)波浪符。它会删除并销毁构造函数在创建对象时分配的内存。
语法:
C++中析构函数的语法如下。
class 类名
{
…………….;
…………….;
public:
类名 ()
{
………….;
}
~类名 ()
{
………….;
}
};
在这里,我们使用波浪符来定义C++中的析构函数。
析构函数没有参数,并且不返回任何值,因此它不能重载。
析构函数的示例:
#include <iostream>
using namespace std;
class Hello {
public:
//构造函数
Hello () {
cout<< "Constructor function is called" <<endl;
}
//析构函数
~Hello () {
cout << "Destructor function is called" <<endl;
}
//成员函数
void display() {
cout <<"Hello World!" <<endl;
}
};
int main(){
//对象创建
Hello obj;
//调用成员函数
obj.display();
return 0;
}
在上面的程序中,我们使用析构函数在创建对象后调用了Hello类的构造函数,并销毁了对象的内存,释放了对象构造函数在创建对象时分配的内存。
构造函数和析构函数在C++编程中的区别如下:
基础 | 构造函数 | 析构函数 |
---|---|---|
使用目的 | 在C++中用于为对象分配内存空间 | 在C++中用于释放构造函数为对象分配的内存空间 |
参数 | 可以包含参数或不包含参数 | 不能包含参数 |
调用 | 在创建类的对象时自动调用 | 在程序终止时自动调用 |
内存 | 构造函数占用内存空间 | 析构函数释放内存空间 |
返回类型 | 构造函数具有返回类型 | 析构函数没有返回类型 |
特殊符号 | 在声明构造函数时不需要特殊符号 | 在声明析构函数时需要使用波浪符号(~) |
数量 | 程序中可以使用多个构造函数 | 程序中只能使用一个析构函数 |
继承 | 构造函数可以继承 | 析构函数不能继承 |
重载 | 构造函数可以重载 | 析构函数不能重载 |
执行顺序 | 构造函数按照声明顺序依次执行 | 析构函数按照构造函数的相反顺序执行,基本上是构造函数的逆序 |
类型 | 构造函数有四种类型:默认构造函数、拷贝构造函数、带参数的构造函数、动态构造函数 | 析构函数没有类别 |
声明 | 创建构造函数的声明如下:class 类名{ ……….public 类名 ([参数列表]){……………….}}; | 创建析构函数的声明如下:class 类名 { …………….; …………….; public: ~xyz(); { ………… }; |