
走进C++
文章平均质量分 85
C++知识梳理
randy.lou
你若盛开,清风自来
展开
-
14.1 操作符重载
逗号、赋值、取地址、逻辑与、逻辑或这类函数有默认含义,程序员对这些默认含义都了然于胸,贸然的修改定义会严重的违反使用者直觉逗号,从左至右计算,返回最右侧的值赋值,逐个成员赋值,依次调用每个成员的赋值函数取地址,取对象的内存地址逻辑与/逻辑或,对数值类型,非0即true;短路操作。原创 2023-11-09 19:56:22 · 163 阅读 · 1 评论 -
13.2 成员指针管理
包含指针成员的类要特别注意复制控制的行为,默认行为种,复制指针只是复制指针地址,并不复制指针指向的对象。两个指针指向同一个对象,会有典型的浅拷贝行为,修改没有隔离,悬垂指针。原创 2023-11-07 20:28:16 · 143 阅读 · 0 评论 -
13.1 复制控制
合成复制构造函数的实现复制每一个非static的数据成员,直接复制内置类型成员的值,调用复制构造函数复制类类型成员的值,数组类型有些特殊,会复制数组中的每一个元素。可以把合成复制构造函数理解为一个所有数据元素都在构造函数初始化列表中的构造函数。以我们的Person类为例private:合成的构造函数应该是这样的复制构造函数其实就是接收单个当前类型的引用形参的构造函数,通过引用会定义为const,但并不是强制要求。如果要自定义复制构造函数,只有满足这个要求定义即可。原创 2023-11-06 22:38:39 · 129 阅读 · 1 评论 -
12.4 友元
友元是一种机制,允许将类的非公有成员授权给外部类或函数访问。友元通过friend关键字声明,只能出现在类定义内部。原创 2023-11-05 08:16:30 · 132 阅读 · 1 评论 -
12.3 构造函数
还是以Person类为例,我们定义了两个只接受一个形参的构造函数,一个接受C风格的字符串字面量;一个接受标准库里的string类型。定义这两个构造函数后,C++能将这两个类型的数据隐式转换为Person对象。这里有一点比较特殊的是,使用Person p1 = std::string("randy")做隐式转换的时候,构造函数必须定义为Person(const std::string &n),形参必须定义为const。原创 2023-11-04 23:16:46 · 78 阅读 · 1 评论 -
12.2 类作用域
看下面的例子,show在定义类的时候已经声明,而verify的定义在类定义之后出现,在成员函数show定义之前,这个名称对show依然是可见的。在show函数内部对verify的调用能正常执行。原创 2023-11-04 16:19:28 · 64 阅读 · 1 评论 -
12.1 类的声明和定义
类声明的右侧可以直接加一对大括号,完成类的定义,一旦定义完成,类的成员就已经确定,编译器也就能计算存储一个该类类型的对象要多少存储空间。一个类如果在多个文件中定义,必须完全相同。一般来说我们会把定义放到头文件中。以Animal类为例,类定义放到Animail.h中,并使用头文件保护符避免重复定义public:age++;#endif //!类定义时,可以指定成员函数的定义,如grow_up,可以只声明函数,在类的外部再给出函数的定义。原创 2023-11-04 09:39:58 · 567 阅读 · 1 评论 -
11.2 泛型算法中的迭代器
除了常规的迭代器,C++还提供额外3种迭代器,这3种迭代器都定义在头文件中。原创 2023-11-03 16:01:19 · 139 阅读 · 0 评论 -
11.1 泛型算法
所谓的泛型算法,是指对符合特定标准的容器/类,提供某些通用功能的封装,比如排序、查找、取最大最小值。大多数泛型算法都是通过一组迭代器来标记了要处理的元素范围,不但可以使用与vector或list这些标准库类型,还可以用在内置数组类型,甚至自定义的容器类型。原创 2023-11-02 23:57:01 · 91 阅读 · 0 评论