随笔分类 -  C++ 学习笔记

C++:强制类型转换
摘要:隐式类型转换是安全的,显式类型转换是有风险的。 static_cast "静态转换",也就是在编译期间转换,转换失败的话会抛出一个编译错误。 const_cast 将 const/volatile 类型转换为非 const/volatile 类型。 reinterpret_cast 仅仅是对二进制位 阅读全文
posted @ 2020-03-08 14:03 xiaobaizzZ 阅读(157) 评论(0) 推荐(0)
C++:移动构造函数和移动赋值运算符
摘要:与拷贝构造函数不同,移动构造函数不分配任何新内存;它接管给定的StrVec中的内存。在接管内存之后,它将给定对象中的指针都置为nullptr。这样就完成了从给的对象的移动操作,此对象将继续存在。最终,移后源对象会被销毁。 移动赋值运算符执行与析构函数和移动构造函数相同的工作。类似拷贝赋值运算符,移动 阅读全文
posted @ 2020-03-08 12:49 xiaobaizzZ 阅读(950) 评论(0) 推荐(0)
C++ class和struct的区别
摘要:C++ 中保留了C语言的 struct 关键字,并且加以扩充。在C语言中,struct 只能包含成员变量,不能包含成员函数。而在C++中,struct 类似于 class,既可以包含成员变量,又可以包含成员函数。 C++中的 struct 和 class 基本是通用的,唯有几个细节不同: 1.使用 阅读全文
posted @ 2020-03-02 22:35 xiaobaizzZ 阅读(137) 评论(0) 推荐(0)
STL - 顺序容器
摘要:1.顺序容器 与内置数组相比,array是一种更安全、更容易使用的数组类型。 forward_list的设计目标是达到与最好的手写的单向链表数据结构相当的性能。因此,forward_list没有size操作。对其他容器而言,size保证是一个快速的常量时间的操作。 顺序容器|性能 : :|: : v 阅读全文
posted @ 2020-03-02 01:02 xiaobaizzZ 阅读(143) 评论(0) 推荐(0)
STL - 关联容器
摘要:关联容器中的元素是按关键字来保存和访问的。与之相对,顺序容器是按它们在容器中的位置和顺序保存和访问的。 关联容器也是模板。为了定义一个map,我们必须指定关键字和值的类型。 与顺序容器类似,可以对一个关联容器的元素进行列表初始化。 按关键字有序保存元素 map 当从map中提取一个元素时,会得到一个 阅读全文
posted @ 2020-03-01 23:57 xiaobaizzZ 阅读(111) 评论(0) 推荐(0)
C++ 右值引用
摘要:左值和右值 左值:当一个对象被用作左值的时候,用的是对象的身份(在内存中的位置)。 右值:当一个对象被用作右值的时候,用的是对象的值(内容)。 右值引用 重要性质:右值引用只能绑定到一个将要销毁的对象。因此,我们可以自由的将一个右值引用的资源移动到另一个对象中。 右值引用的好处 为了支持移动操作,引 阅读全文
posted @ 2020-02-24 13:09 xiaobaizzZ 阅读(197) 评论(0) 推荐(0)
C++ 拷贝控制操作(三/五法则)
摘要:当定义一个类时,我们显式地或隐式地指定了此类型的对象在拷贝、赋值和销毁时做什么。一个类通过定义三种特殊的成员函数来控制这些操作,分别是 拷贝构造函数 、 拷贝赋值运算符 和 析构函数 。 拷贝构造函数定义了当用同类型的另一个对象初始化新对象时做什么,拷贝赋值运算符定义了将一个对象赋予同类型的另一个对 阅读全文
posted @ 2020-02-24 12:28 xiaobaizzZ 阅读(639) 评论(0) 推荐(0)
C++ 运算符重载(operator overloading)
摘要:运算符重载是通过函数实现的,它本质上是函数重载。 运算符重载其实就是定义一个函数,在函数内实现想要的功能,当用到这个运算符时,编译器会自动调用这个函数。 include using namespace std; class complex{ public: complex(); complex(do 阅读全文
posted @ 2020-02-24 00:26 xiaobaizzZ 阅读(1245) 评论(0) 推荐(0)
C++ 拷贝赋值运算符(重载 = )
摘要:当以拷贝的方式初始化一个对象时,会调用拷贝构造函数;当给一个对象赋值时,会调用重载过的赋值运算符。 即使没有显式的重载赋值运算符,编译器也会以默认的方式重载它。默认重载的赋值运算符功能很简单,就是将原有对象的所有成员变量一一赋值给新对象。 当类持有其它资源时,例如动态分配的内存、打开的文件、指向其他 阅读全文
posted @ 2020-02-23 21:07 xiaobaizzZ 阅读(623) 评论(0) 推荐(0)
C++ 拷贝构造函数
摘要:拷贝构造函数:以拷贝的方式初始化一个对象时,会调用拷贝构造函数。 拷贝构造函数只有一个参数,它的类型是当前类的const引用,且任何额外参数都有默认值。 include include using namespace std; class Student{ public: Student(strin 阅读全文
posted @ 2020-02-23 19:54 xiaobaizzZ 阅读(586) 评论(0) 推荐(0)
C++ const引用
摘要:编译器会为const引用创建临时变量 当使用const关键字对引用加以限定后,引用就可以绑定到临时数据了。为什么? 编译器会为临时数据创建一个新的、无名的临时变量,并将临时数据放入该临时变量中,然后再将引用绑定到临时变量。注意,临时变量也是变量,所有的变量都会被分配内存。 为什么编译器为常引用创建临 阅读全文
posted @ 2020-02-23 17:27 xiaobaizzZ 阅读(1164) 评论(0) 推荐(0)
C++ 引用和指针
摘要:参数传递的本质是什么? 参数的传递本质上是一次赋值的过程,赋值 对内存进行拷贝 将一块内存上的数据复制到另一块内存上 C++禁止在函数调用时直接传递数组的内容,而是强制传递数组指针,而对于结构体和对象没有这种限制。 引用是什么? 引用可以看作是数据的一个别名,同个这个别名和原来的名字都能找到这份数据 阅读全文
posted @ 2020-02-23 17:17 xiaobaizzZ 阅读(349) 评论(0) 推荐(0)
C++ 将派生类赋值给基类(向上转型)
摘要:数据类型的转换 类其实也是一种数据类型,也可以发生数据类型转换,不过这种转换只有在基类和派生类之间才有意义,并且只能将派生类赋值给基类。 向上转型(Upcasting):将派生类赋值给基类,非常安全,可以由编译器自动完成。 向下转型(Downcasting):将基类赋值给派生类,有风险,需要程序员手 阅读全文
posted @ 2020-02-23 16:31 xiaobaizzZ 阅读(638) 评论(0) 推荐(0)
C++ 虚继承
摘要:虚继承(Virtual Inheritance) 为什么需要虚继承? 为了解决多继承时的命名冲突和数据冗余问题,C++提出了虚继承,使得在派生类中只保留一份间接基类的成员。 虚基类:某个类做出声明,承诺愿意共享它的基类。这个被共享的基类就是虚基类。 不论虚基类在继承体系中出现了多少次,在派生类中都只 阅读全文
posted @ 2020-02-23 16:12 xiaobaizzZ 阅读(326) 评论(0) 推荐(0)
C++ 基类和派生类的构造函数以及析构函数
摘要:基类和派生类的构造函数 类的构造函数不能被继承,为什么? 因为即使被继承了,它的名字和派生类的名字也不一样,不能成为派生类的构造函数。 大部分基类中都有private属性的成员变量,它们在派生类中无法访问,更不能使用派生类的构造函数来初始化。怎么办? 在派生类的构造函数中调用基类的构造函数。 派生类 阅读全文
posted @ 2020-02-23 15:53 xiaobaizzZ 阅读(788) 评论(0) 推荐(0)
C++ 类继承时的作用域嵌套和对象内存模型
摘要:类继承时的作用域嵌套 类其实也是一种作用域,每个类都会定义它自己的作用域。 当存在继承关系时,派生类的作用域嵌套在基类的作用域之内,如果一个名字在派生类的作用域内无法找到,编译器会继续到外层的基类作用域中查找改名字的定义。 类继承时的对象内存模型 派生类的内存模型:基类成员变量 + 新增成员变量;成 阅读全文
posted @ 2020-02-23 15:01 xiaobaizzZ 阅读(975) 评论(0) 推荐(0)
C++ private + protected + public
摘要:public、protected、private修饰类的成员 public成员可以通过对象来访问。 private成员不能通过对象来访问。 protected成员不能通过对象访问,但是当存在继承关系时,基类中的protected成员可以在派生类中使用。 public、protected、privat 阅读全文
posted @ 2020-02-23 14:37 xiaobaizzZ 阅读(187) 评论(0) 推荐(0)
C++ const成员变量、成员函数和对象
摘要:const成员变量 const成员变量和const普通变量用法相似。初始化const成员变量只有一种方法,就是通过构造函数的初始化列表。 const成员函数 const成员函数可以使用类中的所有成员变量,但是不能修改它们的值。 注意:const成员函数需要在声明和定义的时候在函数头部的结尾加上con 阅读全文
posted @ 2020-02-23 00:51 xiaobaizzZ 阅读(648) 评论(0) 推荐(0)
C++ static静态成员
摘要:static静态成员变量 对象的内存中包含了成员变量,不同的对象占用不同的内存,这使得不同对象的成员变量相互独立,它们的值不受其他对象的影响。 那么如何在多个对象之间共享数据? 静态成员变量:属于类,不属于某个具体的对象,即使创建多个对象,也只为static成员变量分配一份内存,所有对象都使用这份内 阅读全文
posted @ 2020-02-23 00:35 xiaobaizzZ 阅读(254) 评论(0) 推荐(0)
C++ this指针
摘要:this指针是一个const指针,它指向当前对象,通过它可以访问当前对象的所有成员。 this只能用在类的内部,通过this可以访问类的所有成员,包括private, protected, public属性的。 上述例子中成员函数的参数和成员变量重名,只能通过this区分。 this虽然用在类的内部 阅读全文
posted @ 2020-02-22 23:53 xiaobaizzZ 阅读(135) 评论(0) 推荐(0)