随笔分类 -  C/C++语言基础

基本的语法规则问题
摘要:本章节主要讨论参数转换的问题,炸出来很多之前没怎么看到的点; 对于书上之前,举了这样一个返回const by-value的例子; #include<iostream> #include<vector> using namespace std; class rational { public: rat 阅读全文
posted @ 2020-12-09 16:27 暮云林凌 阅读(122) 评论(0) 推荐(0)
摘要:本章节主要概述了非成员、非友元函数和成员函数的抉择问题; 本章节主要指出了如果盲目的增加成员函数,调用其他的成员函数,会破坏数据的封装性; 原因:如果对private成员访问越多,约会破坏数据的封装性,所以使用非成员、非友元函数,可以保障数据的封装性,因为只会访问public数据; 并且本章节也大致 阅读全文
posted @ 2020-12-09 14:54 暮云林凌 阅读(204) 评论(0) 推荐(0)
摘要:通过大量的篇幅说明了两点,但是自己没有接触过太大的工程性代码,所以缺乏这样的思想; 1.将成员变量设置为private,并且通过一些函数对其操作、修改和约束; 2.protect不比public更具有封装性; 阅读全文
posted @ 2020-12-08 20:05 暮云林凌 阅读(74) 评论(0) 推荐(0)
摘要:本章主要针对于返回引用做了一些相关的解释,并且涉及到了heap和stack空间的相关概念; 注意一下堆和栈的相关概念: 相当于C++来说,栈空间相当于显式直接声明,不用定义,回收由编译器负责,典型的回收情况是出了作用域自动销毁; 而堆空间则是通过new/delete来进行分配和回收,并且值得注意的是 阅读全文
posted @ 2020-12-08 18:04 暮云林凌 阅读(120) 评论(0) 推荐(0)
摘要:本章之前在C++primer上看到过,N年前的东西,但是一直不太清楚,并且终于发现了以前自己没太注意的一个点。。。 本章节主要涉及const引用、普通引用、值传递三方面的内容; 英文称之为:pass-by-reference-to-const\pass-by-reference\pass-by-va 阅读全文
posted @ 2020-12-08 16:55 暮云林凌 阅读(101) 评论(0) 推荐(0)
摘要:本章节主要讲述了一些基本的class设计理念以及一些需要注意的地方; 个人认为需要重新补一下设计模式相关的东西,毕竟发现从本章开始,技术层面涉及的不多,全是设计理念的问题; 关于class类的考虑应该有如下形式: 1.新type的对象如何创建和销毁,例如operator new或者operator 阅读全文
posted @ 2020-12-08 16:00 暮云林凌 阅读(89) 评论(0) 推荐(0)
摘要:本章节主要讲述了关于接口的使用问题,也就是如何设计一个被正确使用,而不是被误用的接口; 文中主要针对以下点做了阐述: 1.注意类型系统错误:例如传参中传入的类型和所需要的类型并不符; 2.限制类型内操作:防止因为用户的操作来进行未定义的操作; 3.避免忘记一些操作:经典的shared_ptr指针的问 阅读全文
posted @ 2020-12-08 11:23 暮云林凌 阅读(102) 评论(0) 推荐(0)
摘要:本章节主要是声明了智能指针初始化传参的一些细节问题,本质原因还是因为C++的缺陷; C++是真的淦,还是JAVA足够方便; 建议的步骤,如果进行新的new对象传参,一定先保证智能指针初始化,再将智能指针当作参数用于其他用处,也就是分离操作; 书上给了一个特别典型的例子: pocesswidget(s 阅读全文
posted @ 2020-12-07 21:06 暮云林凌 阅读(79) 评论(0) 推荐(0)
摘要:本章节主要讲述了new和delete的一致性问题; new和delete主要有两种形式: 1.单对象的new和delete形式; 2.多对象类数组的new[]和delete[]形式; 如果对于new[]形式采用delete来释放空间,则会造成只释放第一个地址空间; 并且书中给出了一个经典例子,不要随 阅读全文
posted @ 2020-12-07 20:39 暮云林凌 阅读(67) 评论(0) 推荐(0)
摘要:一直觉得可能这种方法破坏了对于原始资源的封装性,但是书上的一句话说的特别好:资源管理类并不是为了封装而存在的,是为了delete而存在的; 所以,返回原始资源的访问,并不算破坏封装性; 原始资源的使用往往和C API接口有关,所以本章节给出了几个例子,如何返回原始资源; 针对于智能指针而言: Inv 阅读全文
posted @ 2020-12-07 17:19 暮云林凌 阅读(74) 评论(0) 推荐(0)
摘要:条款十三讲解了heap_base下的资源类管理问题,旨在使用auto_ptr和share_ptr进行资源管理; 但是很多情况下需要自定义类来进行管理,因为并不是所有的资源都是heap_base的,但是资源管理类必须要注意赋值和符号赋值的问题; 文中采用了经典的mutex的例子,对mutex进行封装, 阅读全文
posted @ 2020-12-07 16:40 暮云林凌 阅读(115) 评论(0) 推荐(0)
摘要:本章节主要描述了资源释放可能出现的问题; 其中比较着重讲述的是指针资源释放的例子,并且阐述了一个关键点:资源的释放最好交给类来解决,而不是使用delete进行显式的处理; 考虑如下例子: class test { public: test(); }; test* creatTest(); void 阅读全文
posted @ 2020-12-07 15:31 暮云林凌 阅读(65) 评论(0) 推荐(0)
摘要:本章主要讲述了两大复制函数(符号赋值和赋值函数)的存在问题,这次是第一次接触,所以没有什么印象; 关于类内成员可能遗漏的问题: 如果我们不对函数进行指定,不适用默认的赋值函数,会导致编译器不会对复制对象进行检查,换句话说就是无论漏掉成员也不会报错; 因此,我们在制定赋值函数,必须要对操作负责,所以每 阅读全文
posted @ 2020-12-04 15:22 暮云林凌 阅读(75) 评论(0) 推荐(0)
摘要:对于自我赋值,第一反应是形如x=x的形式,这只是最常见的一种而已; 对于自我赋值,往往存在都比较隐式:例如指向同一对象的指针或者引用进行赋值,也算是自我赋值的一种; 比较直观的是在派生和继承中的指向问题; 例如:两个不同的指针分别指向基类base和派生类derived,但是由于base指针任然可以指 阅读全文
posted @ 2020-12-04 13:04 暮云林凌 阅读(135) 评论(0) 推荐(0)
摘要:该条款主要是为了连锁形式而服务,即形如: x=y=z=15; 即: x=(y=(z=15)); 为了能够实现该功能,常常采用返回赋值符号的左边变量(当然其他操作也可以这样进行); 即如下所示: class wideget { public: wideget& operator+=(const wid 阅读全文
posted @ 2020-12-03 23:45 暮云林凌 阅读(98) 评论(0) 推荐(0)
摘要:本章主要讲解了多态情况下在构造函数内调用virtual的问题; 针对于多态情况下,我们希望根据指针指向的类型调用不同的虚函数,但是在构造函数中可能存在问题; 例如下列例子: class Transaction { public: Transaction(); virtual void logTran 阅读全文
posted @ 2020-12-03 23:31 暮云林凌 阅读(108) 评论(0) 推荐(0)
摘要:本章节主要描述了析构函数异常捕捉的问题; 对于C++来说,有一条重要的异常捕捉规定:所以异常都可以抛出,但是不可以在析构函数内进行传播; 所以对于析构函数,一定要注意异常问题,要么捕捉,要么强行结束; 但是由于程序强制结束并不科学,所以一边采用捕捉的方式来进行处理; 但是一旦出现异常,必定意味着程序 阅读全文
posted @ 2020-12-03 21:20 暮云林凌 阅读(194) 评论(0) 推荐(0)
摘要:对于析构函数是否virtual主要看是否实在多态的情境下; 对于基类来说,首先需要明确的是,不是所有的基类都已多态为目标而诞生,例如条款6中曾经提过关于赋值和符号赋值的做基类的问题; 对于多态性来说,我们时常使用一个指向基类的指针来进行虚函数的调用; #include<iostream> using 阅读全文
posted @ 2020-12-03 17:49 暮云林凌 阅读(113) 评论(0) 推荐(0)
摘要:本章节针对于条款6做出了一个补充,旨在指出如何避免使用编译器的默认四大函数,即构造、析构、copy、assignment copy四类函数; 由于某些情况下我们不希望copy和assignment copy的存在,保持每个实例化类的独一无二; 但是如果不进行指定,会让编译器默认构造,所以必须要寻求某 阅读全文
posted @ 2020-12-03 15:46 暮云林凌 阅读(58) 评论(0) 推荐(0)
摘要:本章节主要讲述了如果不指定类内构造、析构、赋值函数所可能出现的坑; 对于每一个类,如果不指定任何函数,则编译器会帮助使用者构建四类基本函数: 1.构造函数:构建; 2.析构函数:析构; 3.赋值函数:主要针对于实参括号初始化所使用的函数; 4.符号赋值函数:利用等号进行函数赋值的函数; 其中构造析构 阅读全文
posted @ 2020-12-03 15:11 暮云林凌 阅读(93) 评论(0) 推荐(0)