C++ – C++类的特殊成员函数,析构函数,拷贝构造函数,移动构造函数,赋值运算符,移动赋值运算符介绍和基础语法
本文将对C++类中的默认构造函数,带参构造函数,移动构造函数,拷贝构造函数(复制构造函数),赋值运算符,移动赋值运算符等的特殊成员函数基本用法和基础语法进行简要的介绍和总结。
1 C++类常用的特殊成员函数
1.1 类的默认构造函数
默认构造函数是不需要实参就可以调用的构造函数。
1.2 类的拷贝构造函数(复制构造函数)
当对象从同类型的类一对象直接初始化或者复制初始化时会调用拷贝构造函数。
1.3 类的移动构造函数
当从同类型类对象的右值初始化对象时会调用移动构造函数。
1.4 类的赋值运算符函数
当类对象被同一类型对象直接使用操作符=
时会调用类的赋值运算符函数。
1.5 类的移动赋值运算符函数
当类对象被同意类型对象的右值直接使用操作符=
时会调用类的移动赋值运算符函数。
1.6 类的析构函数
析构函数是对象终结时调用的特殊成员函数。析构函数的目的是释放对象可能在其生存期间获得的资源。
2 一个完整的C++类特殊成员函数编写示例
#include <iostream>
class Point
{
public:
Point():m_X(0.0),m_Y(0.0),m_Z(0.0)
{
std::cout << "默认构造函数" << std::endl;
}
Point(float x, float y, float z):m_X(x),m_Y(y),m_Z(z)
{
std::cout << "带参构造函数" << std::endl;
}
Point(Point&& point):m_X(std::move(point.m_X)), m_Y(std::move(point.m_Y)), m_Z(std::move(point.m_Z))
{
std::cout << "移动构造函数" << std::endl;
}
Point(const Point& point)
{
std::cout << "拷贝构造函数(赋值构造函数)" << std::endl;
this->m_X = point.m_X;
this->m_Y = point.m_Y;
this->m_Z = point.m_Z;
}
Point& operator= (const Point& point)
{
std::cout << "拷贝赋值运算符" << std::endl;
this->m_X = point.m_X;
this->m_Y = point.m_Y;
this->m_Z = point.m_Z;
return *this;
}
Point& operator=(Point&& point)
{
std::cout << "移动赋值运算符" << std::endl;
m_X = std::move(point.m_X);
m_Y = std::move(point.m_Y);
m_Z = std::move(point.m_Z);
return *this;
}
virtual~Point()
{
std::cout << "析构函数" << std::endl;
}
void Print()
{
std::cout << m_X << " " << m_Y << " " << m_Z << std::endl << std::endl;
}
private:
float m_X;
float m_Y;
float m_Z;
};
int main()
{
// 调用默认构造函数
Point temp_point1;
temp_point1.Print();
// 调用带参构造函数
Point temp_point2(1.0,1.5,2.0);
temp_point2.Print();
// 调用移动构造函数
Point temp_point3 = std::move(temp_point2);
temp_point3.Print();
// 调用拷贝构造函数
Point temp_point4 = temp_point3;
temp_point4.Print();
// 调用拷贝赋值运算符
temp_point1 = temp_point4;
temp_point1.Print();
// 调用移动赋值运算符
temp_point1 = std::move(temp_point2);
temp_point1.Print();
}
结果:
默认构造函数
0 0 0
带参构造函数
1 1.5 2
移动构造函数
1 1.5 2
拷贝构造函数(赋值构造函数)
1 1.5 2
拷贝赋值运算符
1 1.5 2
移动赋值运算符
1 1.5 2
析构函数
析构函数
析构函数
析构函数
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:C++ – C++类的特殊成员函数,析构函数,拷贝构造函数,移动构造函数,赋值运算符,移动赋值运算符介绍和基础语法
原文链接:https://www.stubbornhuang.com/2000/
发布于:2022年03月07日 16:19:50
修改于:2023年06月26日 20:31:26
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
50