c++学习笔记(四)—— 类和结构
2022/1/17 1:33:42
本文主要是介绍c++学习笔记(四)—— 类和结构,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
类和结构
默认访问权限
类的默认访问权限是private
结构是public
mutable
该关键字修饰的变量可以在类的const方法中修改
class Node { mutable int a = 0; void ChangeA() const { ++a; } }
构造函数
建议使用如下方式:
//正确 ConstRef::ConstRef(int ii): i(ii), ci(ii), ri(ii) {} //错误 ConstRef::ConstRef(int ii) { i = ii; ci = ii; ri = ii; }
原因:
- 效率不同,后者是先初始化再赋值,前者是直接初始化
- 如果ci、ri是引用或const变量,会报错,因为这俩对象不能被赋值
委托构造函数
c++11新特性
class A{ public: A(int ia): a(ia)} {}; A() : A(1){}; //委托给另一个构造函数 }
explicit
使用方法:在构造函数声明前面加上该关键字
功能:抑制构造函数的隐式转换。加了之后,不能进行隐式转换,且编辑器也不会在自动转换过程中使用该函数
限制条件:支队一个实参的构造函数有效
class A{ explicit A(string &s); }
类内静态成员只能在外部初始化
因为静态数据成员不属于类的任何一个对象,所以它们并不是在创建类的对象时被定义的。
这意味着它们不是由类的构造函数初始化的。而且一般来说,我们不能在类的内部初始化静态成员。
相反的,必须在类的外部定义和初始化每个静态成员,且只能定义一次。
三/五法则
C++三法则:如果需要析构函数,则一定需要拷贝构造函数和拷贝赋值操作符。原因是如果需要析构函数,则代表类中有类似指针这样无法自动释放的资源,那么为了防止浅拷贝,需要自己重新两个拷贝函数。
C++五法则:在较新的 C++11 标准中,为了支持移动语义,又增加了移动构造函数和移动赋值运算符。与三之法则不同的是,不提供移动构造函数和移动赋值运算符通常不是错误,但会导致失去优化机会。
=delete
如果我们不想定义默认的一些函数(比如拷贝或赋值),就可以在声明的时候,后面加上=delete
,表示删除的函数。
struct NoCopy { NoCopy() = default; NoCopy(const NoCopy&) = delete; }
比如iostream就不支持拷贝
注:析构函数不能删除
这篇关于c++学习笔记(四)—— 类和结构的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享