
C++笔记
文章平均质量分 77
C++/QT/网络
InterestingFigure
Salted fish in hand, I have the world.
展开
-
20、关联容器、无序容器
【代码】20、关联容器、无序容器。原创 2023-12-11 10:51:36 · 407 阅读 · 0 评论 -
19、线性容器、适配器容器
向量中的元素被存储在一段连续的内存空间中。原创 2023-12-11 10:44:06 · 455 阅读 · 0 评论 -
18、迭代器、查找、排序
【代码】18、迭代器、查找、排序。原创 2023-12-11 10:28:18 · 439 阅读 · 0 评论 -
17、类模板
由于模板要经过两次编译,在第一次编译模板的代码时,类型形参的具体类型尚不明确,编译器将把类型形参的嵌套类型理解为某个未知类型的静态成员变量,因此编译器看到使用这样的标识符声明变量时会报告错误这就叫嵌套依赖。类模板本身并不代表一个确定的类型( 即不能用于定义对象) ,只有通过类型实参实例化成真正的类后才具备类的语义(即可以定义对象)。利用未知类定义的对象来访问成员函数模板时,编译器在第一次编译时无法解析成员函数模板的类型参数列表的而报告编译错误。总结:成员函数模板的延迟编译,阻碍了虚函数表的静态构建。原创 2023-12-11 10:07:13 · 962 阅读 · 0 评论 -
16、函数模板
由于模板要经过两次编译,在第一次编译模板的代码时,类型形参的具体类型尚不明确,编译器将把类型形参的嵌套类型理解为某个未知类型的静态成员变量,因此编译器看到使用这样的标识符声明变量时会报告错误这就叫嵌套依赖。如果函数模板的调用形参和类型形参相关,那么在实例化函数模板时即使不显式指明函数模板的类型实参,编译器也有能力根据调用实参的类型隐式推断出正确的类型实参的类型。// virtual templatevoid Func(){ } // error:成员函数模板不可以定义为虚函数。原创 2023-12-11 09:58:31 · 880 阅读 · 0 评论 -
15、lambda表达式、右值引用、移动语义
lambda表达式的名称是一个表达式 (外观类似函数),但本质绝非如此。没有必要有常右值引用,因为常右值引用,完全可以被常左值引用替代。保证功能正确的情况下,做到性能提升。资源的转移 代替 资源的重建。原创 2023-12-10 21:48:30 · 791 阅读 · 0 评论 -
14-2(C++11)类型推导、类型计算
【代码】14-2(C++11)类型推导、类型计算。原创 2023-12-10 21:34:30 · 938 阅读 · 0 评论 -
14-1、IO流
其中filename表示文件路径,mode表示打开模式。I/O流类对象内部保存当前状态,其值为以下常量的位或。返回读/写指针当前位置相对于文件头的字节偏移量。l/O流类对象支持到bool类型的隐式转换。处于1或4状态的流,在复位前无法工作。返回最后一次从输入流中读取的字节数。通过构造函数打开I/O流。原创 2023-12-10 20:14:17 · 1183 阅读 · 0 评论 -
13、C++异常处理
对于第二种情况,异常正处于激活状态,而析构函数又抛出了异常这时C++将通过std::terminate()函数,令进程中止。根据异常对象的类型自上至下顺序匹配,而非最优匹配,因此对子类类型异常的捕获不要放在对基类类型异常的捕获后面。如果函数抛出了异常说明以外的异常类型,那么该异常将无法被捕获并导致进程中止。异常说明是函数原型的一部分,旨在说明函数可能抛出的异常类型。异常说明是一种承诺,承诺函数不会抛出异常说明以外的异常类型。隐式抛出异常的函数也可以列出它的异常说明。异常说明可以没有也可以为空。原创 2023-12-10 18:57:42 · 879 阅读 · 0 评论 -
12、虚函数的应用、虚析构函数
一个类中,除了构造函数和静态成员函数外,任何函数都可以被声明为虚函数。原创 2023-12-10 18:37:17 · 406 阅读 · 0 评论 -
11、虚函数、多态、纯虚函数
当编译器看到通过指针或引用调用虚函数的语句时,并不急于生成有关函数跳转的指令,相反编译器会用一段代码替代该语句,这段代码在运行时才能被执行,完成如下操作。如果子类的成员函数和基类的虚函数具有相同的函数签名,那么该成员函数就也是虚函数,无论其是否带有virtual关键字。调用虚函数的指针也可以是基类中的this指针,同样能满足多态的条件,但在构造和析构函数中除外。virtual 返回值 函数名(形参表) { …的成员函数,称为纯虚函数或抽象方法。形如class 类名{形如class 类名{原创 2023-12-10 18:19:16 · 824 阅读 · 0 评论 -
10、多重继承、钻石继承、虚继承
将子类对象的指针,隐式转换为它的某种基类类型指针,编译器会根据各个基类子对象在子类对象中的位置,进行适当的偏移计算。汇聚子类对象中的每个中间子类子对象都持有一个指针,通过该指针可以获取 中间子类子对象的首地址 到 公共虚基类子对象的首地址的 偏移量。如果在子类的多个基类中,存在同名的标识符,那么任何试图通过子类对象,或在子类内部访问该名字的操作,都将引发歧义。一个子类继承自多个基类,而这些基类又源自共同的祖先这样的继承结构称为钻石继承(菱形继承)公共基类子对象,在汇聚子类对象中,存在多个实例。原创 2023-12-10 18:02:56 · 518 阅读 · 0 评论 -
8、操作符重载
若源类型和目标类型都是类类型 (而非基本类型) ,则既可以通过类型转换构造函数也可以通过类型转换操作符函数实现自定义类型转换,但不要两者同时使用。若源类型和目标类型都是基本类型,则无法实现自定义类型转换,基本类型间的类型转换规则完全。无法重载所有操作数均为基本类型的操作符: 如实现。若源类型是基本类型,目标类型是类类型,则只能通过。若源类型是类类型,目标类型是基本类型,则只能通过。不是所有的操作符都能重载,以下操作符不能重载。函数实现自定义类型转换。原创 2023-12-08 09:34:26 · 1205 阅读 · 0 评论 -
7、类型转换构造、析构、深拷贝、类的静态成员
利用一个已定义的对象,来定义另一个不同类型的对象实现从源类型到目标类型的隐式类型转换的目的总结下已知构造,包括类型转换构造通过explicit关键字,可以强制这种通过类型转换构造函数实现的类型转换必须通过显式地进行。原创 2023-12-07 17:57:52 · 429 阅读 · 0 评论 -
6、缺省构造、拷贝构造、拷贝赋值、初始化表
缺省构造又称为无参构造。有参构造的每个形参都提供一个缺省值,这也是一个无参构造。,因为它可能作为另外个类的成员变量。原创 2023-12-07 17:31:19 · 496 阅读 · 0 评论 -
5、类的定义、类的实例化、string类的实现原理
为整个对象分配内存空间调用构造函数定义成员变量执行用户在构造函数中书写的代码// 构造函数:(1)函数名必须和类名相同 (2)没有返回值类型// 构造函数被调用的时间: 定义对象的同时,自动被调用// 构造函数的作用:定义对象的每一个成员变量public:Human( /* Human* this */ int age = 0, const char* name="匿名"){// 在this指向的内存空间中定义m_age(给m_age分类内存空间),初始值为随机数。原创 2023-12-06 08:48:12 · 909 阅读 · 0 评论 -
4、类和对象、this指针、常对象和常函数
对不同成员的访问控制限定加以区分,体现了C++作为面向对象程序设计语言的封装特性。在常函数内部无法修改成员变量的值,除非该成员变量被mutable关键字修饰。在类成员函数的形参表之后,函数体之前加上const关键字,则该成员函数的。该语句定义了变量p,且给p在栈分配了内存空间,成员属性初值为随机数。被const关键字修饰的对象、对象指针或对象引用,统称为常对象。原型相同的成员函数,常版本和非常版本构成重载。访问控制限定符仅作用于类,而非作用于对象。,这样的成员函数被称为常函数。原创 2023-12-05 18:06:31 · 416 阅读 · 0 评论 -
3、引用的应用、显示类型转换、面向对象
引用型的返回值,从函数中返回引用一定要保证在函数返回以后,该引用的目标依然有效。数组指针:指向一个数组的指针,保存的是首个元素的地址。引用型的返回值也分为常引用型和非常引用型。面向对象的三大要件:封装、继承、多态。指针数组:元素都是指针的数组。必须显示类型转换的情况。原创 2023-12-05 17:49:49 · 386 阅读 · 0 评论 -
2、函数重载和覆盖、动态内存分配、引用
重载关系的函数的调用重载和隐藏重载解析的类型决定其调用的哪个版本的重载函数重载是通过C++换名机制来实现的通过extern“C”可以要求C++编译器按照C方式编译函数,即不做换名,当然也就无法重载。原创 2023-12-05 08:52:47 · 443 阅读 · 0 评论 -
1、命名空间、C++的复合类型、缺省参数
void save( int m){ // 声明同时定义money += m;// 声明void BOC::pay( int m){ // 定义money -= m;std::cout原创 2023-12-04 18:17:59 · 629 阅读 · 0 评论