
c++速成学习笔记
-
tankeven
电子发烧友,编程爱好者
展开
-
c++11标准风格
【代码】c++11标准风格。原创 2024-06-03 00:46:11 · 137 阅读 · 0 评论 -
c++文件流
1.流的概念在 C++ 中,流(stream)是一种用来处理输入输出数据的概念。可以把流看作从源头(如文件、键盘、网络连接等)到终端的数据传输管道。这些管道在程序运行时动态创建,并可以连接到多种不同的源头和终端,例如文件、控制台窗口、打印机、屏幕显示、内存等。通过使用流,开发人员可以将输入和输出操作看作连续的字节序列,并使用统一的方式读取和写入数据。在 C++ 中,有两类流:输入流和输出流。输入流用于从外部源头中读取数据,输出流用于将数据输出到外部终端。例如,一个程序可以从文原创 2024-06-03 00:14:46 · 315 阅读 · 0 评论 -
c++异常处理exception
【代码】c++异常处理exception。原创 2024-06-02 19:27:45 · 419 阅读 · 0 评论 -
c++智能指针std::shared_ptr
【代码】c++智能指针std::shared_ptr。原创 2024-05-27 23:55:53 · 181 阅读 · 0 评论 -
c++模板与泛型编程
总而言之:泛型编程就是为了编写和数据类型没有关系的逻辑代码,而模板就是为了实现代码逻辑和数据类型没有关系抽象的数据类,是泛型编程的先决条件;3.如果需要强制调用模板函数,可以使用显式调用的方式去调用指定的模板函数;模板的作用:通过使用模板降低重复代码的编写,把已经写好的代码作用最大化;总而言之:模板作用于函数就是函数模板,模板作用于类就是类模板;函数模板用于定义模板函数,模板函数就是用模板生成的函数;类模板用于定义模板类,模板类就是用类模板定义出来的类;模板就是泛型编程的前置条件,属于充分但不必要条件;原创 2024-05-27 23:22:10 · 299 阅读 · 0 评论 -
c++ operator运算符重载
运算符重载就是为了让c++已有的的运算符通过运算符重载后实现原来没有的功能以便更方便使用。`、逻辑与运算符 `&&` 和逻辑或运算符 `||` 都不允许直接重载。5.赋值运算符:=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=原因是这些运算符都已经有了明确的语义,重载它们可能会破坏其原有的语义,5.运算符重载函数可以作为类的成员函数,可以作为全局函数。1.5个算术运算符:+, -, *, /, %,++=,<,>,<=,>=4.位运算符:&,|,^,~,<<, >>6. 箭头运算符->原创 2024-05-26 15:56:33 · 387 阅读 · 0 评论 -
c++ final关键字的理解
final`关键字能够有效地帮助C++开发人员避免重写重要的方法和继承禁止的类,更严谨地保证了代码的安全性。在C++中,关键字`final`用于指示该成员函数或类不能被派生类重新定义或继承,保证了代码的安全性。1. `final`仅适用于虚函数和类定义,对于其他成员函数,使用`final`是无效的。4. 若派生类覆盖了一个声明为`final`的虚函数,编译器会报错。3. 若虚函数被声明为`final`,则该虚函数不能被派生类重写。2. 若类被声明为`final`,则该类不能被继承。原创 2024-05-17 00:08:08 · 293 阅读 · 0 评论 -
c++ 纯虚函数与抽象类的理解
然而抽象类定义的指针并没有当前类类型的对象被该指针所指向,因为抽象类不能定义对象,所以抽象类只能用来对派生类服务;抽象类不能用于实例化对象,因为类里边有函数没有实现,是不完整的类,所以不能用于定义对象;只有声明,没有函数体的虚函数。因为抽象类毕竟是个类型,当然可以用来定义指针,// 只要子类中有一个纯虚函数没有实现,那么这个子类就无法实例化对象。// 不管这个纯虚函数是在自己类中声明的还是继承过来的。=0为纯虚函数的格式,类似于这是一个空的函数指针;拥有一个及以上纯虚函数后的类就成为了抽象类;原创 2024-05-15 01:10:53 · 239 阅读 · 0 评论 -
c++ 联编&多态polymorphic
由于虚函数表的存在,程序会根据实际对象的类型,调用相应的成员函数,而不是调用基类中定义的虚函数。在动态联编中,在不同编译单元中的相同名称的代码和数据将会具有不同地址,也就是存在不同的副本。这样,通过基类类型的指针或引用,调用派生类的函数也不会出现错误,保证了程序的正确性和稳定性。c++中多态意味着调用类的成员函数的时候,会根据当前调用函数的对象类型不同去执行不同的函数;C++中的联编指的是把代码和数据指定到内存地址的过程。在静态联编中,相同的名字地址是相同的,在内存中只有一份相同名称的代码或数据。原创 2024-05-14 01:10:42 · 373 阅读 · 0 评论 -
c++ 继承与派生的简单理解
派生是一种创建新类的方式,在原来已有被继承类的基础上,不影响原来的类,不改变原来类的代码,实现对于功能的扩展,在原有被继承类的基础上快速增加新的功能;也就是说派生类对象可以当作基类对象使用,因为派生类继承了基类的所有成员,基类有的派生类都有,直接用派生类就可以,即可以用父类的地方就可以用子类;父类的公有成员被子类继承后,子类对父类拥有成员的访问权限根据子类的继承方式设置与继承方式相同的访问权限;继承描述的是类与类之间的关系,新创建的类被称为派生类或子类,被继承的类称为基类或父类;原创 2024-05-05 00:03:31 · 910 阅读 · 0 评论 -
c++ 1个数组&指针转换以及容器使用实例
【代码】c++ 1个数组&指针转换以及容器使用实例。原创 2024-04-05 13:16:17 · 204 阅读 · 0 评论 -
c++ friend
/ 总之,使用友元函数和友元类时需要注意设计的合理性、代码的可读性、可维护性和安全性,以保证代码的质量。// 1. 友元函数和友元类破坏了类的封装性。即如果类 B 是类 A 的友元,类 C 是类 B 的友元,那么并不意味着类 C 也是类 A 的友元。// 2. 友元函数和友元类可以访问类的私有成员变量和成员函数,这会导致代码的可读性和可维护性下降。即如果类 B 是类 A 的友元,但在其它类中声明的类无法访问类 A 的私有成员。即如果类 B 是类 A 的友元,但是对于类 B 来说,类 A 并不是其友元。原创 2024-02-14 02:05:05 · 463 阅读 · 0 评论 -
c++ system calls chrono
系统服务包括与操作系统、硬件、网络等底层资源交互的函数,旨在提供对底层资源的访问和管理,保证应用程序能够正常运行。上述函数都是C++系统服务中常用的函数,它们提供了对操作系统底层资源的访问和管理,是系统编程所必需的。C++中的chrono是时间库,用于实现时间相关的功能,例如计时器、执行时间、日期等。内存管理函数:可以获取当前进程的内存使用情况、分配和释放内存等。时间函数:可以获取系统时间、计算时间差、格式化时间等。函数:可以读写文件、创建和删除文件、设置文件属性等。、线程名称、创建和销毁线程等。原创 2024-02-13 17:00:49 · 197 阅读 · 0 评论 -
c++关键字const
const修饰的成员函数表示该函数保证不会修改类的成员变量,从而保证对象的状态不会被改变。为了避免const使用时出现的错误,需要在使用时注意以上细节,如常量的定义和初始化、使用const修饰的指针、const修饰的成员变量和成员函数、以及常量对象的初始化等细节。- 如果类中有一个const成员函数,那么该成员函数是类的常量成员函数,只能被const对象调用,不能被非const对象调用。const修饰的数据在定义时必须进行初始化,且不能被修改,因此使用const可以提高代码的安全性和可读性。原创 2024-01-15 01:37:55 · 839 阅读 · 0 评论 -
c++关键字static
它们与类相关联,而不是与类的对象关联,因此可以被所有类的对象共享。它们只有一个实例,并且可以在类的任何成员函数中修改,从而可以用来记录该类的所有对象的统一信息。静态成员函数不能被声明为虚函数,因为虚函数实现需要运行时的信息,而静态成员函数不依赖于类的对象,无法确定运行时的信息。静态成员变量和函数并不依赖于类的任何对象,它们是类的属性,因此不需要通过类的对象访问,可以通过类名直接访问。静态成员变量和函数是公有的,可被所有对象访问,但是无法访问类的非静态成员。静态成员变量必须在类外进行定义,且只能定义一次。原创 2024-01-14 16:44:08 · 515 阅读 · 0 评论 -
c++ this指针
5.非静态成员函数中可以直接使用this来代表指向该函数作用对象的指针,静态成员函数中不能使用this指针,因为静态成员函数并不具体作用与某个对象,因此,静态成员函数真实的参数的个数,就是程序中写出的参数个数。this指针存在与类中每一个普通成员函数中,类的普通函数访问类的普通成员的时候,this总是指向调用者的对象,this指针不能修改指向。this指针其实是隐藏起来的,当类的成员与参数是同一个名字时,需要使用this指针,否则不需要使用this指针。2.只能在“成员函数”的内部使用。原创 2024-01-02 00:35:11 · 504 阅读 · 0 评论 -
c++数据测试
在这个示例中,我们首先创建了一个`DataBase<std::string>`的实例化对象,并将两个字符串存储到`m_dataulink`和`m_datadlink`向量中,分别使用`setData()`来设置这两个向量中的数据。需要注意的是,这个示例只测试了`DataBase`类的`setData()`和`getData()`方法,实际上,这里也只有`整数int`类型一个成员变量,而使用时,需要根据实际情况进行更多类型的测试。然后我们使用`getData()`方法分别获取这两个向量中的数据,并打印结果。原创 2023-11-14 01:21:27 · 177 阅读 · 0 评论 -
c++线程安全队列
【代码】c++线程安全队列。原创 2023-11-13 00:17:34 · 471 阅读 · 0 评论 -
c++析构函数
类的对象不是因为调用了析构函数导致声明周期结束,而是对象的生命周期结束时,会自动调用析构函数。析构函数是一种特殊的函数,主要作用是对象生命周期结束时进行清理,系统可以自动调用析构函数。如果定义了一个类的析构函数,则系统不会自动为该类生成默认的析构函数。任何一个类只可能有一个析构函数,因为析构函数是固定的,不可能重载。如果自己没有声明和实现析构函数,系统会自动生成一个析构函数。如果是栈区的对象则是在函数结束的时候调用析构函数,如果是堆区的对象则是在delete是调用析构函数。原创 2023-11-12 19:02:16 · 70 阅读 · 0 评论 -
c++构造/析构/拷贝构造/移动构造/复制构造
构造函数可以用来初始化对象的成员变量,对它们进行一些初始化操作和初始化检查等。它的名称与类的名称完全相同,没有返回值类型,可以带有参数,也可以没有参数。构造函数是一种特殊的成员函数,用于在创建对象时初始化对象的成员变量。在创建对象时,需要调用相应的构造函数,该构造函数会执行对象的初始化。使用构造函数时,需要在类定义的内部声明构造函数,同时还需要实现它。在创建对象时,构造函数会自动被调用,初始化对象的成员变量。原创 2023-11-07 00:55:42 · 134 阅读 · 0 评论 -
学习一个c++线程池
【代码】学习一个c++线程池。原创 2023-10-21 02:22:10 · 69 阅读 · 0 评论 -
c++的string类
C++ 的 string 类是一个用于操作字符串的数据类型,它提供了很多方便快捷的字符串操作方法。使用 string 类可以有效避免字符串缓冲区溢出等一系列问题。原创 2023-10-16 23:34:50 · 67 阅读 · 0 评论 -
c++申请和释放堆内存new/delete
new的作用类似于malloc,用于申请堆内存。delete作用类似于free,用于释放堆内存。原创 2023-10-15 19:32:41 · 123 阅读 · 0 评论 -
c++输入输出cin/cout
输入cin输出cout包含在<iostream>中,使用时需要使用std命名空间。原创 2023-10-15 19:14:05 · 81 阅读 · 0 评论 -
c++命名空间namespace
命名空间namespace是用来组织和重用代码的编译单元,通过命名空间来避免冲突,解决重名现象。C++命名空间是一种将标识符封装在命名区域中的机制,以避免与其他标识符发生冲突,以及提高代码的可读性和可维护性。命名空间可以定义在任何C++程序的范围内,在命名空间中定义的变量、函数、类等的名字前需要加上命名空间的名称,以隔离到其他命名空间的同名或全局作用域中的标识符。包括全局作用域、函数内、类定义内等等。// 命名空间中的代码块。原创 2023-10-15 18:25:29 · 87 阅读 · 0 评论 -
c++引用
左值引用即常规的引用,而右值引用是新引入的一种引用方式,用于支持C++11中的移动构造函数和移动赋值运算符,以及实现完美转发等功能。它强调了指向指针本身的对指针的访问,指向指针的引用将本身作为指针的别名,同时指向指针的引用也被称为指针引用(Pointer Reference),它关注指针变量的地址,而不是它所指向的变量和值。使用指向指针的引用也可以方便的在复杂数据结构中操作指针,指向指针的引用通常用于多级指针的操作。定义指向指针的引用时,需要在数据类型前加一次“&”,这样就可以定义一个指向指针的引用。原创 2023-09-16 01:09:32 · 64 阅读 · 0 评论 -
c++函数参数缺省
4.重载具有二义性,函数重载时需要明确指定参数,不能随意使用缺省参数,否则编译器会对参数不明确的函数调用报错。// 这种设置缺省参数的形式是错误的。3.语法规定:在函数有声明的情况下,只能在函数声明中设置缺省参数,不能再定义中设置缺省参数,否则语法报错。定义:声明函数某个参数的时候指定一个默认值,调用该函数时如果采用默认值,无须指定该参数。1.函数参数传递的顺序只能从前往后赋值,所以缺省参数默认值只能是从后向前给形参默认值。原创 2023-09-12 01:58:47 · 155 阅读 · 0 评论 -
c++内联函数inline
它将函数体的内容直接嵌入到调用它的代码中,从而避免了函数调用的开销。- 在调用内联函数时,编译器不一定会将其体现为函数调用,可能直接将其替换为函数体,因此应当避免在内联函数中定义复杂的逻辑或循环。使用内联函数可以提高程序的执行速度,减少函数调用所带来的开销,尤其适用于需要频繁调用、函数体简短的情况。- 在类定义中定义的函数默认是内联函数,如需禁用内联可以使用 `inline` 关键字;- 内联函数只适用于简短的函数体,否则依然会带来较大的执行开销;- 内联函数不能递归调用自身;原创 2023-09-06 23:53:35 · 58 阅读 · 0 评论 -
c++函数重载
相反,C++允许函数重载通过不同的参数类型、参数个数、参数顺序、const/Volatile等方式进行重载,因为这些都可以构成函数签名的一部分。不同版本的函数在参数类型、参数个数、参数顺序等方面有所区别,这样就可以根据需要选择不同的函数版本进行调用。- 函数重载仅与函数的签名(即函数名、参数类型、参数个数、参数顺序)有关,与函数返回值无关;在重载函数时,应该遵循参数类型更具体的函数应该放在前面的原则,在调用函数时显式指明参数类型。当在函数调用时,根据实际传递给函数的参数列表匹配最适合的函数进行调用。原创 2023-09-11 01:17:05 · 73 阅读 · 0 评论