随笔分类 -  C++

摘要:直接暴论:对静态成员变量进行访问的方法都应该被声明为静态成员方法! 情况:在普通成员方法中访问静态成员变量 在这种情况下,虽然因为普通成员方法既可以访问普通成员变量,又可以访问静态成员变量,编译器不会报错, 但是,再仔细想想,要在这个类实例化之前就访问早已初始化完成的静态成员变量咋办?没办法,他没这 阅读全文
posted @ 2022-02-21 22:37 Kisen 阅读(31) 评论(0) 推荐(0) 编辑
摘要:题目地址:https://www.nowcoder.com/practice/f9c6f980eeec43ef85be20755ddbeaf4?tpId=37&tqId=21239&rp=1&ru=/ta/huawei&qru=/ta/huawei&difficulty=&judgeStatus=& 阅读全文
posted @ 2022-02-19 12:07 Kisen 阅读(302) 评论(0) 推荐(0) 编辑
摘要:c++ 线程间通信方式可分为两大类: 两个进程中的两个线程通信方式 信号量, socket网络连接, 共享内存 ,管道,共享文件 一个进程中的两个线程间通信方式 互斥锁 条件变量 信号量 读写锁shared_lock???什么鬼 互斥锁:顾名思义,在构造函数中加锁,在析构函数中解锁,是为上锁而优化的 阅读全文
posted @ 2022-02-17 19:08 Kisen 阅读(4039) 评论(0) 推荐(0) 编辑
摘要:目前认识到的机制: C++中构造函数和析构函数只会在编译阶段运行一次,无论你定义了多少不同的构造函数,在一般情况下只会让编译器选择其中一个进行执行,且不会调用构造函数内部其他的构造函数。 阅读全文
posted @ 2022-01-13 12:01 Kisen 阅读(49) 评论(0) 推荐(0) 编辑
摘要:大学里学C++时老师都说不建议使用三元表达式,虽然很简洁,但是会产生一些问题。 其中的一个问题就是三元表达式中":"两边的对象必须是相同类型的。 这其实本质上是从类型安全角度上考虑做出如此设计的,但是C++本身又不是类型安全的,因此惯性思维容易出错。 阅读全文
posted @ 2022-01-13 11:49 Kisen 阅读(122) 评论(0) 推荐(0) 编辑
摘要:重载指在同一个类中,可以有一组具有相同函数名,不同参数列表的函数。 重写指在继承中,子类对基类中的虚函数进行重新实现,函数名、参数表皆不可改变 重定义指在继承中,子类对基类中的普通函数进行重新实现,函数名、参数表皆不可改变 因此,重写和重定义最大不同就是目标函数是否是虚函数。 阅读全文
posted @ 2022-01-13 11:23 Kisen 阅读(196) 评论(0) 推荐(0) 编辑
摘要:一般来说,C++中return 所返回的对象有三类: 值 引用 指针 当返回指针或引用时要注意绝对不能是指向栈空间的指针或者引用,否则可能出现野指针; 返回对象时也要注意效率问题。 阅读全文
posted @ 2022-01-12 01:11 Kisen 阅读(60) 评论(0) 推荐(0) 编辑
摘要:C++种拷贝分为深拷贝和浅拷贝。 深拷贝本质上拷贝了指针和资源;浅拷贝本质上只拷贝了指针。 因此,需要注意的是,若拷贝构造函数或析构函数时必须使用深拷贝而不是浅拷贝,否则可能会导致对同一份资源进行多次构造或者析构,引发未知错误程序崩溃。 阅读全文
posted @ 2022-01-12 00:52 Kisen 阅读(35) 评论(0) 推荐(0) 编辑
摘要:标答: 函数重载时,要通过函数签名对函数进行区分。 所谓函数签名,是由以下两个部分组成的: 函数名 函数参数的个数和类型 在重载的函数中,由于函数名相同,因此要区分函数就要从参数方面入手,从函数传递参数的个数和类型上去判断究竟是哪个函数被调用了。 注意,C/C++是可以忽略函数返回值的,因此,不能从 阅读全文
posted @ 2022-01-12 00:34 Kisen 阅读(1324) 评论(0) 推荐(0) 编辑
摘要:何时使用static修饰的局部变量? 当要求变量受到上一次运算后的影响时,使用static修饰局部变量即可。 举个栗子: #include <iostream> using namespace std; int add(int n){ static int i = 0; i += n; return 阅读全文
posted @ 2022-01-11 22:08 Kisen 阅读(31) 评论(0) 推荐(0) 编辑
摘要:目前只遇到过三个: #include <iostream> using namespace std; int add(int n){ static int i = 0; i += n; return i; } int main(void) { if(__cplusplus){ cout << "c+ 阅读全文
posted @ 2022-01-11 21:55 Kisen 阅读(66) 评论(0) 推荐(0) 编辑
摘要:转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退格(BS) ,将当前位置移到前一列 008 \f 换页(FF),将当前位置移到下页开头 012 \n 换行(LF) ,将当前位置移到下一行开头 010 \r 回车(CR) ,将当前位置移到本行开头 013 \t 水平制表 阅读全文
posted @ 2022-01-11 18:04 Kisen 阅读(122) 评论(0) 推荐(0) 编辑
摘要:内存耗尽的两种主流处理方式 一、直接return 适用于只有一处需要释放内存,即整个函数只有一处需要动态分配内存。 二、直接exit(1) 适用于函数多出可能发生内存溢出的情况。 注意设置异常错误处理 一般做法是为new/malloc编写自定义的异常处理函数。 阅读全文
posted @ 2022-01-11 17:22 Kisen 阅读(236) 评论(0) 推荐(0) 编辑
摘要:为何有了malloc()和free()还要有new和delete? 区别其实在标题就已经十分明显了——malloc()和free()是C/C++的标准库中的库函数,用于手动开辟/销毁内存空间;new和delete是C++中新增的关键字,作用与malloc()和free()一致。 虽然作用一致,但是库 阅读全文
posted @ 2022-01-11 17:16 Kisen 阅读(62) 评论(0) 推荐(1) 编辑
摘要:C++内联函数 c++内联函数提出的目的是节约栈空间。众所周知函数存放在栈中,而系统内存中栈空间是有限而宝贵的。由于有的时候一些简单的函数可能会大量占用栈空间,因此inline得以出现。 inline函数,即内联函数,本质上是编译器(注意,是编译器认定是否可以认定为内联函数)将inline关键字所限 阅读全文
posted @ 2022-01-11 16:45 Kisen 阅读(66) 评论(0) 推荐(1) 编辑
摘要:C++内存分配 静态存储区域 在编译阶段时,全局变量等静态变量就已经在静态存储区域完成初始化了。 栈 一般函数本身以及函数内部所有变量都会在栈上创建。函数执行结束后进行出栈。虽然效率很高但可惜的是内存中栈存储的空间有限。 堆 一般亦称动态内存分配,即在堆上分配内存空间供变量使用。程序员自我管理内存的 阅读全文
posted @ 2022-01-11 15:21 Kisen 阅读(32) 评论(0) 推荐(0) 编辑
摘要:虚函数表是实现C++中实现多态的基础,当然也是实现虚函数的基础。 每一个类都独立拥有一个虚函数表,类中所有虚函数都以数组形式存放在该类的虚函数表中。 虚函数表在类的编译阶段就建立了,然而虚函数表指针——作为类的隐藏成员——却在运行期间当函数被调用时才完成初始化的。 阅读全文
posted @ 2022-01-11 13:59 Kisen 阅读(132) 评论(0) 推荐(0) 编辑
摘要:C++中多态的两种作用 主要从函数和类两个方面分析: 从函数角度切入,多态使得代码可以实现模块化,隐藏了实现细节,实现了代码重用; 从类的角度切入,多态使得类在继承和派生时,保证家族中任意实例的属性被正确调用。 C++中多态的本质是为了方便代码重用。 阅读全文
posted @ 2022-01-11 13:43 Kisen 阅读(738) 评论(0) 推荐(0) 编辑
摘要:C++中,虚函数分为纯虚函数和虚函数。 纯虚函数的作用只有一个,就是定义抽象类。 虚函数则提供两种提示: 在继承中,子类将重写父类中的虚函数,也就是说,虚函数在继承设计下将担任多态的实现; 子类中的重写函数将动态绑定父类中的虚函数 本质上,c++中虚函数的产生是为了实现OOP继承。 阅读全文
posted @ 2022-01-11 13:11 Kisen 阅读(79) 评论(0) 推荐(0) 编辑
摘要:C++中值传递、指针传递、引用传递的关系和区别 引用与指针的区别 引用必须初始化且不能为空,引用不能被改变 指针可以为空,且可以被改变 阅读全文
posted @ 2022-01-11 12:30 Kisen 阅读(35) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示