C++
文章平均质量分 56
C++学习笔记
努力码到100k
仅记录本人的学习过程中的笔记,学习渠道来自各个博主,没有侵权的意图,希望能帮助到你。
展开
-
显示构造函数中explicit关键字的作用
在 C++中, explicit。加入explicit关键字后。没加explicit关键字。explicit 作用。原创 2023-12-28 08:03:33 · 336 阅读 · 0 评论 -
多继承语法&菱形继承
虚继承继承的是两个虚表指针,两个虚表指针加上偏移量指向唯一的基类。草泥马继承自动物的数据继承了两份,其实我们应该清楚,这份数据我们只需要一份就可以。羊继承了动物的数据,驼同样继承了动物的数据,当草泥马使用数据时,就会产生二义性。利用虚继承可以解决菱形继承问题,继承之前加上关键字virtual,变为虚继承。菱形继承带来的主要问题是子类继承两份相同的数据,导致资源浪费以及毫无意义。总结: 多继承中如果父类中出现了同名情况,子类使用时候要加作用域。这种继承被称为菱形继承,或者钻石继承。两个派生类继承同一个基类。原创 2023-10-05 14:55:24 · 71 阅读 · 0 评论 -
继承的基本语法
有些类与类之间存在特殊的关系,例如下图中:我们发现,定义这些类时,下级别的成员除了拥有上一级的共性,还有自己的特性。这个时候我们就可以考虑利用继承的技术,减少重复代码。原创 2023-10-05 08:43:37 · 343 阅读 · 0 评论 -
友元&运算符重载&仿函数
C++标准程序库》里对仿函数的解释是:仿函数是泛型编程强大威力和纯粹抽象概念的又一例证。你可以说,任何东西,只要其行为像函数,它就是一个函数。因此如果你定义了一个对象,行为像函数,它就可以被当做函数来用。在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术。运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。,增强了C++的可扩充性,使代码更加直观、易读,便于对对象进行各种运算操作。友元的目的就是让一个函数或者类访问另一个类中私有成员。原创 2023-10-04 14:21:15 · 75 阅读 · 0 评论 -
C++对象模型和this指针
常函数内不可以修改成员属性(常函数的const修饰的是this指针,this指针本身是一个指针常量,指针的指向不可以修改,加上const以后,指针的值也不可以修改了)每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码。C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针。c++通过提供特殊的对象指针,this指针,解决上述问题。this指针的本质是一个指针常量,指针的指向不可修改。在C++中,类内的成员变量和成员函数分开存储,常对象只能调用常函数。原创 2023-10-03 14:58:32 · 38 阅读 · 0 评论 -
初始化列表&类对象&静态成员
构造的顺序是 :先调用对象成员的构造,再调用本类构造。析构顺序与构造相反。静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员。当类中成员是其他类对象时,我们称该成员为。C++提供了初始化列表语法,用来初始化属性。静态成员函数只能访问静态成员变量。所有对象共享同一份数据。所有对象共享同一个函数。类内声明,类外初始化。原创 2023-10-03 07:54:18 · 29 阅读 · 0 评论 -
深拷贝和浅拷贝
如果属性有在堆区开辟的,一定要自己提供拷贝构造函数,防止浅拷贝带来的堆区重复释放问题。浅拷贝:简单的赋值拷贝操作,编译器提供的 就是一个简单的赋值操作。p2先释放,p1后释放,析构顺序遵寻先进后出。深拷贝:在堆区重新申请空间,进行拷贝操作。析构函数作用:堆区有数据时,要进行释放。原创 2023-10-03 07:41:58 · 23 阅读 · 0 评论 -
对象的初始化和清理
C++中的面向对象来源于生活,每个对象也都会有初始设置以及对象销毁前的清理数据的设置。原创 2023-10-02 15:11:38 · 25 阅读 · 0 评论 -
类和对象中的封装性
类在设计时,可以把属性和行为放在不同的权限下,加以控制。将所有成员属性设置为私有,可以自己控制读写权限。在设计类的时候,属性和行为写在一起,表现事物。将属性和行为作为一个整体,表现生活中的事物。在C++中 struct和class唯一的。对于写权限,我们可以检测数据的有效性。封装是C++面向对象三大特性之一。protected 保护权限。struct 默认权限为公共。class 默认权限为私有。将属性和行为加以权限控制。private 私有权限。public 公共权限。原创 2023-10-02 14:14:38 · 32 阅读 · 0 评论 -
函数(默认参数、占位参数、函数重载)
函数名可以相同,提高复用性同一个作用域下函数名称相同函数参数类型不同或者个数不同或者顺序不同函数的返回值不可以作为函数重载的条件//函数重载需要函数都在同一个作用域下cout原创 2023-10-02 09:13:16 · 28 阅读 · 0 评论 -
引用学习笔记
C++推荐用引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器都帮我们做了。在函数形参列表中,可以加const修饰形参,防止形参改变实参。作用:引用是可以作为函数的返回值存在的。引用在初始化后,不可以改变。用法:函数调用作为左值。原创 2023-09-15 08:10:05 · 30 阅读 · 0 评论 -
指针的定义与使用
指针变量定义语法:数据类型 * 变量名;//1、指针的定义int a = 10;//定义整型变量a//指针定义语法: 数据类型 * 变量名;int * p;//指针变量赋值p = &a;//指针指向变量a的地址//打印数据a的地址//打印指针变量p//2、指针的使用//通过*操作指针变量指向的内存return 0;指针变量和普通变量的区别普通变量存放的是数据,指针变量存放的是地址指针变量可以通过" * "操作符,操作指针变量指向的内存空间,这个过程称为解引用。原创 2023-09-12 08:44:11 · 135 阅读 · 0 评论 -
内存分区模型
(字符串常量,const修饰的全局常量),程序结束后,由系统释放掉。堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。不同区域存放的数据,赋予不同的生命周期, 给我们更大的灵活编程。由程序员分配释放,若程序员不释放,程序结束时由操作系统回收。不要返回局部变量的地址,栈区开辟的数据由编译器自动释放。由编译器自动分配释放, 存放函数的参数值,局部变量等。常量区中存放 const修饰的全局常量和字符串常量。利用new创建的数据,会返回该数据对应的类型的指针。堆区开辟的数据,由程序员。原创 2023-09-14 07:58:25 · 43 阅读 · 0 评论 -
在C++中多使用const的理由
它可以保护数据的不变性,增强接口的安全性,为编译器优化提供线索,以及定义不改变成员变量的成员函数。在阅读代码时,我们可以立即知道哪些变量是常量,哪些变量可以被修改。编译器知道const变量的值不会改变,因此它可以进行一些优化,比如将const变量存储在只读内存中,或者进行常量折叠等。当我们在函数参数中使用const时,可以保证在函数内部不会改变输入参数的值,这对于大型对象特别有用,因为它避免了不必要的拷贝。由于const变量的值是固定的,编译器可以在编译时进行优化,例如在计算过程中进行常量折叠或提前计算。原创 2023-10-02 09:17:24 · 40 阅读 · 0 评论 -
结构体中 const使用场景
用const来防止误操作。原创 2023-09-12 20:24:32 · 176 阅读 · 0 评论 -
C++命名空间
C++中如果是需要一个命名空间,就在头文件声明,写成1的形式;如果需要多个,就不声明,写成2的形式。原创 2023-08-29 12:02:52 · 29 阅读 · 0 评论 -
C++11新特性
1.左值和右值是独立于他们的类型的,右值引用类型可能是左值也可能是右值。2.编译器会将已命名的右值引用视为左值,将未命名的右值引用视为右值。3.auto&&或者函数参数类型自动推导的T&&是一个未定的引用类型,它可能是左值引用也可能是右4.值引用类型,这取决于初始化的值类型(上面有例子)。5.通过右值推导 T&& 或者 auto&& 得到的是一个右值引用类型,其余都是左值引用类型。原创 2023-08-24 14:15:15 · 38 阅读 · 0 评论