目录
如需咨询请添加个人微信:a15135158368
欢迎叨扰,多多交流
构造函数和析构函数是类的特殊成员函数,用于管理对象的生命周期。
构造函数(Constructor)
定义
构造函数 是一个在对象创建时自动调用的函数,用于初始化对象的成员变量。
构造函数的名称必须与类名相同,且没有返回类型(不包括 void
)。
种类
构造函数可以是默认构造函数、带参数的构造函数、拷贝构造函数或移动构造函数。
1.默认构造函数
定义:不接受任何参数的构造函数。
如果你没有为类定义任何构造函数,编译器会自动生成一个默认构造函数。
作用:用于在对象创建时进行默认初始化。
#include <iostream>
#include <string>
class MyClass
{
public:
int id;
std::string name;
// 默认构造函数
MyClass()
{
id = 0;
name = "Unnamed";
std::cout << "Default constructor called" << std::endl;
}
// 方法:显示对象的内容
void display() const
{
std::cout << "ID: " << id << ", Name: " << name << std::endl;
}
};
int main()
{
// 创建对象时调用默认构造函数
MyClass obj;
// 显示对象的内容
obj.display();
return 0;
}
2.带参数的构造函数
定义:接受参数的构造函数,用于根据提供的值初始化对象的成员变量。
作用:允许在对象创建时传递参数来初始化对象。
#include <iostream>
#include <string>
class MyClass
{
public:
int x; // 用于存储一个整数
std::string name; // 用于存储一个名称
// 带参数的构造函数
//【 x(val), name(str)】成员变量将传入的参数直接赋值给x
MyClass(int val, const std::string& str) : x(val), name(str)
{
std::cout << "Parameterized constructor called" << std::endl;
}
// 显示对象的内容
void display() const
{
std::cout << "x: " << x << ", Name: " << name << std::endl;
}
};
int main()
{
// 创建对象时传递参数,调用带参数的构造函数
MyClass obj(42, "Example");
// 显示对象的内容
obj.display();
return 0;
}
//---------------------------------------------------------------------------
// 结果:
// Parameterized constructor called
// x: 42, Name: Example
//---------------------------------------------------------------------------
3.浅拷贝构造函数
仅仅复制对象的表面,就是对象变量的值。
当指针和引用类型的成员变量,仅复制值,而不复制实际内存内容.
#include <iostream>
class MyClass {
public:
int* data;
// 构造函数:为指针分配内存并初始化数据
MyClass(int value) {
data = new int(value);
std::cout << "构造函数:分配内存并设置值" << *data << std::endl;
}
// 浅拷贝构造函数
MyClass(const MyClass& obj) {
data = obj.data; // 仅复制指针的值,两个对象将共享同一块内存
std::cout << "浅拷贝构造函数:复制指针,值为 "