C++
文章平均质量分 76
关于C++的知识点
Bigkinder
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ 中面向对象编程如何实现动态绑定?
在 C++ 中,动态绑定(Dynamic Binding)是通过 虚函数(virtual function) 和 多态性(polymorphism) 来实现的。这是面向对象编程的重要特性之一,每个对象中都有一个指向虚函数表的指针(vptr)。当通过基类指针或引用调用虚函数时,程序会通过虚指针查找虚函数表中对应的函数地址,并调用实际的函数。编译器为每个含虚函数的类生成一个虚函数表(vtable),其中存储了该类中虚函数的地址。原创 2024-12-14 23:55:06 · 474 阅读 · 0 评论 -
C++ 中实现数据隐藏的方法
数据隐藏是面向对象编程的重要特性,它确保对象的内部状态只能通过受控的接口访问,从而提高代码的安全性和可维护性。通过这些方式,C++ 程序员可以有效地保护类的内部数据,同时提供清晰的访问接口以满足外部需求。原创 2024-12-12 22:31:16 · 412 阅读 · 0 评论 -
赋值运算符重载
作用:赋值运算符重载用于在一个对象已经被创建并赋值后,进行赋值操作。它允许我们自定义对象赋值的行为,特别是当对象涉及动态分配的资源时,默认的赋值行为可能会出现问题(例如浅拷贝),因此我们可以通过重载赋值运算符来实现深拷贝。原创 2024-12-11 21:27:47 · 565 阅读 · 0 评论 -
关于内联函数(实际使用的例子)
C++ 内联函数(inline function)是指在编译时将函数调用直接替换为函数体的代码,从而避免函数调用的开销。1.它通常用于短小的函数,以提高程序的执行效率。2.内联函数通过在函数声明前加上 inline 关键字来定义。3.使用内联函数可以减少函数调用的栈操作,但过度使用可能增加代码体积,导致性能下降。原创 2024-12-09 21:44:09 · 2914 阅读 · 0 评论 -
静态链接和动态链接
【代码】静态链接和动态链接。原创 2024-12-04 20:59:22 · 481 阅读 · 0 评论 -
关于多态(静态,动态)
多态性(Polymorphism)是面向对象编程中的一个基本概念,指的是同一操作或方法可以作用于不同类型的对象,并产生不同的行为。在不同的上下文中,"多态"意味着“多种形态”。原创 2024-12-07 21:27:59 · 687 阅读 · 0 评论 -
封装以及getter和setter怎么提高代码的灵活性和安全性
封装性是面向对象编程的一个重要特性,它指的是将数据和操作(方法)封装到对象中,并通过限定访问权限来保护数据的完整性和安全性。这样可以隐藏对象的内部实现细节,仅暴露必要的接口,从而提高代码的可维护性和复用性。原创 2024-12-05 23:10:30 · 690 阅读 · 0 评论 -
关于函数重载
编译器在编译期间,根据调用的函数名和参数列表,选择合适的函数进行调用。函数重载(Function Overloading)是 C++ 中的一种特性,允许在同一个作用域内定义多个函数,这些函数具有相同的名字但参数列表不同。编译器通过函数的参数个数、类型、顺序来区分它们,并调用对应的函数。(重载只和名字有关,与函数的返回值,函数类型无关)C++ 编译器在实现函数重载时,通过 名字修饰(Name Mangling)机制为每个函数生成唯一的标识符。在链接过程中,编译器利用这些修饰后的名称区分不同的函数。原创 2024-12-01 23:47:21 · 837 阅读 · 0 评论 -
关于内存对齐
内存对齐是计算机系统中为优化性能和确保数据正确访问而对变量的存储地址进行的一种约束。内存对齐的目的是使数据按照特定的规则存储在内存中,从而提高访问速度并减少潜在的硬件问题。原创 2024-12-01 00:16:12 · 836 阅读 · 0 评论 -
volatile关键字
C 和 C++ 中,volatile 关键字是一种类型修饰符,主要用于修饰变量,告诉编译器该变量的值可能随时被外部环境(如硬件或其他线程)修改。因此编译器在优化代码时需要特别注意以下几点:作用和用途编译器通常会对代码进行优化,如果某个变量看起来没有被显式修改,编译器可能会优化掉对该变量的多次读取。如果没有 volatile 修饰,编译器可能会认为 flag 在循环中没有改变,于是将其值缓存在寄存器中,导致程序进入死循环。编译器会保证每次读取 flag 都是从内存中读取,而不是从寄存器中读取。原创 2024-11-30 22:50:39 · 413 阅读 · 0 评论 -
关于类型转换以及其可能遇到的问题
如果进行类型转换时不满足某些规则,或者转换是非法的,可能会导致未定义行为。C++ 对这种情况没有提供明确的错误或警告,可能导致程序崩溃、数据破坏等问题。// 未定义行为,转换不合法非法指针转换:使用 reinterpret_cast 进行不正确的指针转换时,可能会产生不可预料的结果,甚至可能破坏程序的内存结构。对象转换不合法:在继承关系中使用不正确的转换(例如,基类指针强制转换为与之不相关的派生类指针),会导致程序崩溃或访问非法内存。原创 2024-12-02 23:17:29 · 2304 阅读 · 0 评论 -
右值引用和移动语义
它为实现移动语义提供了基础,允许资源的所有权从一个对象“移动”到另一个对象,而不是进行昂贵的复制。C++中的移动语义(Move Semantics)是C++11引入的一种优化技术,旨在提高程序的性能,特别是在涉及大数据量对象时。它通过允许资源(如内存或文件句柄等)从一个对象转移到另一个对象,避免了不必要的深拷贝,从而减少了资源的复制和释放开销。在传统的拷贝语义中,当对象被赋值或传递时,通常会执行对象的深拷贝。而移动语义允许将资源的所有权“移动”到新对象,而不是复制内容,避免了不必要的开销。原创 2024-11-29 20:39:12 · 2019 阅读 · 0 评论 -
关于C++的自动类型推导auto 和 decltype
使用 尾置返回类型(trailing return type)的语法,指定返回值的类型为 decltype(a + b)。decltype 是一种编译时的类型推导工具,它用于获取某个表达式的精确类型,而不需要创建或初始化变量。在这种写法下,尾置返回类型不再是必需的,但 C++11 中仍然需要它来指定复杂返回类型。返回类型可能很复杂,且依赖于模板参数,因此需要一种机制基于表达式结果推导返回类型。用于声明函数的返回值类型,表示类型由编译器自动推导。类型获取、模板返回类型、复杂类型声明等。不保留引用(值传递)原创 2024-11-29 20:26:07 · 493 阅读 · 0 评论 -
关于继承以及父类指针调用方法
继承性是面向对象编程(OOP)的三大基本特性之一(另外两个是封装和多态)。继承允许一个类(子类)从另一个类(父类或基类)中获取属性和方法,从而实现代码重用和扩展。原创 2024-12-06 23:49:45 · 613 阅读 · 0 评论 -
new delete & malloc free
总结来说,malloc 和 new 分配内存时的最大限制受操作系统、硬件和进程的虚拟内存限制等多方面因素的影响,超出限制时它们会返回 NULL 或抛出异常。new 和 delete 底层代码调用了malloc 和 free。泛用性不如malloc和free。1.new返回值不需强转,而malloc返回值需要(malloc返回值是void*)4.new先调用malloc再调用构造函数(delete先析构,再free)3.new不需要传入具体字节,malloc需要。5.new会抛出异常,malloc返回空。原创 2024-12-03 19:20:19 · 922 阅读 · 0 评论
分享