C++学习Day03之构造函数和析构函数

目录

  • 一、程序及输出
    • 1.1 构造函数
    • 1.2 析构函数
    • 1.3 构造函数的权限设置
  • 二、分析与总结


一、程序及输出

1.1 构造函数

构造函数
没有返回值 不用写void
函数名 与 类名相同
可以有参数 ,可以发生重载
构造函数 由编译器自动调用一次 无须手动调用
创建的时候调用

#include
using namespace std;
class Person
{
public: //构造和析构大多数情况下声明在public下
	Person()
	{
		cout << "Person的构造函数调用" << endl;
	}
		Person(int a)
	{
		cout << "Person的(int a)构造函数调用" << endl;
	}
}
void test01()
{
	Person p;
}

int main(){
	test01();
	Person p2(2);
	system("pause");
	return EXIT_SUCCESS;
}	

输出:
C++学习Day03之构造函数和析构函数_第1张图片

1.2 析构函数

析构函数
没有返回值 不用写void
函数名 与类名相同 函数名前 加 ~
不可以有参数 ,不可以发生重载
析构函数 也是由编译器自动调用一次,无须手动调用
释放的时候调用

#include
using namespace std;

class Person
{
public:
    Person()
	{
		cout << "Person的构造函数调用" << endl;
	}
	
	Person(int a)
	{
		cout << "Person的(int a)构造函数调用" << endl;
	}
	~Person()
	{
		cout << "Person的析构函数调用" << endl;
	}
}
void test01()
{
	Person p;
}

int main(){
	test01();
	Person p2(2 );
	system("pause");
	return EXIT_SUCCESS;
}

输出:可以看到test01()函数结束后局部变量p被释放p2则是在程序结束后释放
在这里插入图片描述

1.3 构造函数的权限设置

通常情况下,我们将构造函数权限设置为public,即public权限,这是为了方便类的实例化,但并不代表不可以设置成其他权限。
构造函数的权限设置是通过访问修饰符来实现的,包括 public、protected 和 private。这些修饰符用于控制构造函数对外部代码和派生类的可见性和访问权限。

public 构造函数:
如果构造函数声明为 public,则该构造函数可以在任何地方被访问,包括类的外部和派生类。
通常情况下,类的构造函数应该声明为 public,以便外部代码可以创建类的实例。

public:
    // 公共构造函数
    MyClass() {
        // 构造函数代码
    }
};

protected 构造函数:
如果构造函数声明为 protected,则该构造函数可以被派生类访问,但不能被类的外部访问。
通常情况下,将构造函数声明为 protected 用于实现基类的构造函数,以便派生类可以调用该构造函数来初始化基类部分。

class BaseClass {
protected:
    // 受保护的构造函数
    BaseClass() {
        // 构造函数代码
    }
};
class DerivedClass : public BaseClass {
public:
    // 在派生类中调用基类的受保护构造函数
    DerivedClass() : BaseClass() {
        // 构造函数代码
    }
};

private 构造函数:
如果构造函数声明为 private,则该构造函数不能被类的外部访问,也不能被派生类访问。
通常情况下,将构造函数声明为 private 用于实现单例模式或者禁止外部代码创建类的实例。

class Singleton {
public:
    // 静态方法用于获取类的唯一实例
    static Singleton& getInstance() {
        static Singleton instance;
        return instance;
    }
private:
    // 私有构造函数
    Singleton() {
        // 构造函数代码
    }
};

二、分析与总结

构造函数和析构函数是 C++ 中特殊的成员函数,它们分别用于对象的初始化和清理工作。下面是对构造函数析构函数的概括总结:

构造函数(Constructor):
构造函数是一种特殊的成员函数,其名称与类名相同,没有返回类型(包括 void)。
构造函数在创建对象时被自动调用,用于初始化对象的数据成员。
构造函数可以重载,即可以定义多个具有不同参数列表的构造函数,称为重载构造函数。
如果没有定义构造函数,编译器会自动生成默认构造函数,用于执行成员变量的默认初始化。
构造函数可以进行初始化列表初始化成员变量,也可以在函数体内进行初始化。
析构函数(Destructor):
析构函数是一种特殊的成员函数,其名称以波浪号(~)加上类名构成,没有返回类型(包括 void)。
析构函数在对象生命周期结束时自动调用,用于清理对象所占用的资源,例如释放动态分配的内存、关闭文件等。
如果没有定义析构函数,编译器会自动生成默认析构函数,用于执行成员变量的清理工作。
在类中可以只有一个析构函数,且不能重载。

你可能感兴趣的:(C++,c++,学习)