C++ – C++类的特殊成员函数,析构函数,拷贝构造函数,移动构造函数,赋值运算符,移动赋值运算符介绍和基础语法
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:C++ – C++类的特殊成员函数,析构函数,拷贝构造函数,移动构造函数,赋值运算符,移动赋值运算符介绍和基础语法
原文链接:https://www.stubbornhuang.com/2000/
发布于:2022年03月07日 16:19:50
修改于:2022年03月08日 16:52:43

本文将对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
析构函数
析构函数
析构函数
析构函数
当前分类随机文章推荐
- C++ - 使用标准库实现事件和委托,信号和槽机制 阅读184次,点赞0次
- C++ - 将一维数组/二维数组/三维数组作为函数参数传递给函数 阅读1109次,点赞0次
- C++ - std::string与std::wstring相互转换 阅读1562次,点赞0次
- C++ - C++使用cuda api获取当前GPU显卡的总共的显存容量、已使用显存容量、剩余显存容量 阅读3359次,点赞2次
- C++ - 拷贝构造函数与拷贝构造函数调用时机 阅读156次,点赞0次
- C++ - 线程安全的std::cout 阅读1775次,点赞0次
- C++ - 导出接口函数和导出C++类 阅读42次,点赞0次
- C++ - 使用std::chrono获取当前秒级/毫秒级/微秒级/纳秒级时间戳 阅读2474次,点赞0次
- C++ - 格式化json字符串,方便展示json字符串的层次结构 阅读2220次,点赞0次
- C++ - 获取当前进程内存使用情况 阅读7761次,点赞9次
全站随机文章推荐
- 资源分享 - Game Physics Pearls 英文高清PDF下载 阅读1605次,点赞0次
- 工具网站推荐 - DLL‑FILES.COM帮你找到你的应用程序所缺失的dll文件 阅读2399次,点赞0次
- ThreeJS - 如何提升three.js的渲染效果?看完这篇你可能会有启发 阅读1811次,点赞0次
- 资源分享 - Texturing and Modeling - A Procedural Approach, Third Edition 英文高清PDF下载 阅读1717次,点赞0次
- CCTV电视高清直播源 阅读2471次,点赞2次
- OpenCV - 创建新图像以及遍历图片像素值和设置像素值 阅读2862次,点赞0次
- WordPress - 在文章被复制时弹出弹窗提示转载注明原创 阅读2939次,点赞2次
- 我的开源项目 - 支持C++11特性的定时器TinyTimer 阅读3723次,点赞0次
- GoLand - Windows系统下载、安装、配置Go语言环境 阅读2788次,点赞0次
- WordPress - 使用插件的方式作出类似向主题function.php中添加代码的功能 阅读2385次,点赞0次
评论
164