网站首页 > 基础教程 正文
在C++中,类的8个默认函数:
1.默认构造函数;
2.默认析构函数;
3.默认拷贝构造函数;
4.默认移动构造函数;
5.默认赋值运算符重载函数;
6.默认移动赋值运算符重载函数;
7.默认取址运算符重载函数;
8.默认取址运算符const重载函数;
只是声明一个空类,不做任何事情的话,编译器会自动为我们生成的函数,即默认创建;下面我们就分别看一下这8个默认函数的原型以及注意事项:
class A
{
public:
//1. 默认构造函数
A();
//2. 默认析构函数
~A();
//3. 默认拷贝构造函数
A(const A&);
//4. 默认移动构造函数
A(A&&);
//5. 默认赋值运算符重载函数
A& operator = (const A&);
//6. 默认移动赋值运算符重载函数
A& operator = (const A&&);
//7. 默认取址运算符重载函数
A* operator &();
//8. 默认取址运算符const重载函数
const A* operator &() const;
}
如果不希望默认添加的话,如不希望对象被显示构造或赋值,可以将对应函数声明为private,C++11新增标识符 default 和 delete,控制这些默认函数是否使用。
default:被标识的默认函数将使用类的默认行为,如:A() = default;
delete:被标识的默认函数将禁用,如:A() = delete;
另外使用中记得注意:
1.默认构造函数:在自定义类不定义构造函数的情况下会默认添加,如果有定义构造函数则不会;默认不含任何参数的空函数,啥也不干;
2.默认析构函数:默认无参啥也不干;
3.默认拷贝构造函数:浅拷贝(即:逐字节拷贝);
4.默认移动构造函数:对于内置类型成员浅拷贝,对于自定义类型,看其是否实现了移动构造函数。实现了就用其的移动构造函数,没实现就用拷贝构造函数。
5.默认赋值运算符重载函数:浅拷贝,避免自赋值;
6.默认移动赋值运算符重载函数:对于内置类型成员浅拷贝。对于自定义类型,如果其实现了移动赋值重载,就调用。如果没有实现,就调用其拷贝赋值函数。
7.默认取址运算符重载函数:函数内部直接return this,一般使用默认即可;
8.默认取址运算符const重载函数:函数内部直接return this,一般使用默认即可;
其他更多使用注意事项,请关注并欢迎留言交流;
猜你喜欢
- 2024-10-12 全面剖析 C++ Boost 智能指针!| CSDN 博文精选
- 2024-10-12 C++设计模式——原型模式 设计模式之原型模式
- 2024-10-12 如何攻克 C++ 中复杂的类型转换? c++中四种类型转换的方式
- 2024-10-12 C++|由成员函数到运算符重载(类内、类外、友元方式重载)
- 2024-10-12 C++11新特性(49)- 用移动类对象代替拷贝类对象
- 2024-10-12 C++类的默认成员函数 c++类中定义的成员默认访问属性为( )
- 2024-10-12 C++的23种设计模式(上篇-创建型模式)
- 2024-10-12 C++构造函数和析构函数详解 c语言构造函数和析构函数
- 2024-10-12 c++——默认成员函数 c++成员变量默认值
- 2024-10-12 C++|类中实现操作符重载,用操作符代替成员函数名
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)