当前位置: 首页 > 心得体会 > 读后感

《C,,沉思录》读后感

作者:祭司 | 发布时间:2021-01-19 01:05:33 收藏本文 下载本文

1 《 《C++ 沉思录 》 读后感 1.关于类的反思 C++与 C 不同的特殊的有四个,分别是构造函数、析构函数、复制构造函数和赋值操作符。

1.1.为什么需要一个构造函数?当开始从 c 转 c++的时候,有很多次都在考虑这个问题,其实后来才发现,的确,有一些简单的类,可以不需要构造函数,但是有一些复杂的类,为了隐藏其内部的工作方式,就需要写一个构造函数进行工作。

1.2.为什么有一些数据要私有,有些是公有,方法也是这样?public 修饰的数据和方法是可以让任何人访问的,如果你需要控制访问这些数据或者是某些方法,那么最好使用域修饰符 public、protect、private 来限制。在书里有一段不错的描述,说明了我们对私有变量的访问可以有一些不同于一般做法的地方,举个例子,比如对一个私有变量的读取,一般都会写一个函数来返回这个私有变量。

1.3.为什么需要一个无参的构造函数?在很多时候,当自己写了一个带参数的构造函数之后,都会自动加上一个无参的构造函数,其实并不知道这个会有什么用。事实上一个无参的构造函数,能够让你像这样定义类 MT a;如果 MT没有无参的构造函数,那么这样的定义就是错的。

1.4.类一定需要析构函数吗?这个答案显然是否定的。只有当你的类中申请了资源,并且在成员函数中并没有释放掉所申请的资源的时候,才会用到析构函数。

1.5.类需要一个虚的析构函数吗?C++ 如果类中有一个指针数据成员,而你没有用 new,析构函数是不用 delete 的。在类中,int char 这些只要不是 new的,也同样不用释放,系统会自动把他们占的内存释放掉,只有 new 的才会手动的去 delete。int char ,这些基本类型,是局部变量,存在于栈上。而一个指针定义的时候,也是在栈上比如 int *p;p 在栈上,而且 p 的值也是栈的一个地址。但是当 int *p = new int;这时候,p 这个变量是在栈上的。但是 p 的值是一个地址,2 这个地址是堆上的一个地址。如果不 delete p;那么,这个地址会一直被占用着,不能被其他的对象所使用,所以我们用完这个地址,要把这个地址释放掉。

1.6.复制构造函数是什么?什么时候用到?拷贝构造函数,又称复制构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。其唯一的形参必须是引用,但并不限制为 const,一般普遍的会加上 const 限制。如果你没有定义一个复制构造函数,那么编译器会自动为你添加一个复制构造函数。其实编译器不光会自动添加复制构造函数,它还会在你没有定义的情况下添加赋值操作符、析构函数,甚至构造函数,编译器添加的复制构造函数直接复制了数据成员和基类的对象,如果你不是想这样做的话,你就得自己定义一个复制构造函数来防止编译器添加的那个。

1.7.什么时候需要一个赋值操作符?当你需要用赋值操作符复制对象时就需要定义一个,这里需要注意一点,赋值操作符只有在对象已经构造完成之后才会被调用。赋值操作符函数看起来似乎和副本构造器很像,同样都是简单的“成员到成员”的方式进行复制。其实有很大的区别,副本构造器会创建一个新对象,而赋值操作符不会,它会返回一个对象类的引用。在 C++中赋值操作符函数必须返回一个值,且返回的值必须是左操作数类型,即与调用者(左操作数)对象同类型。于是,利用*this 返回对象自身。

2.我们怎样才能设计一个 C++ 容器,使它有能力包含类型不同而彼此相关的对象呢? 2.1.代理类。看到过一个例子,感觉比较生动解释代理类这个东西。假设我们要设计一个停车场,这个停车场就是一个容器。那么停车场需要停各种不同的车辆,不同的车辆就是不同的类,但他们都是有关系的(都是交通工具)。我们知道,C++标准的容器中储存的都是相同类型的类,例如数组,vector......那么原有的容器就无法满足我们停车场的需求了。

所以我们就需要一个能包含类型不同而彼此相关的对象(车)。

2.2.模拟一下这个停车场的容器。就是说这个容器到底是具有什么功能呢?首先,这个停车场的容器并不知道车是怎么停进来的,只知道停进来的是车,不知道具体的车型,其次,当车进来的时候,咱们停车场发一个停车位给它,然后当它停车停好后,停车场知道它具体停在哪个位置了,最后就是当它开车走了

2 的时候,咱们把停车位给它释放了。

2.3.如何做到既能避免显示的处理内存分配,又能保持类在运行时绑定的属性呢?解决这个问题的关键是要用类来表示概念,这在 C++中是很常见的。我总是把这一点当作最基本的 C++设计原则。在复制对象的过程中运用这个设计原则,就是定义一个行为和交通工具对象相似,而又潜在的表示了所有继承自交通工具类的对象的东西,我们把这种类的对象叫做代理(surrogate)。

2.4.实际上,停车场需要操作的实际上是车位,并不是车辆。车位,是一个跟车辆绑定的东西。在这个例子中,我们可以把车位理解成车辆类的代理。无论是第一种变通办法还是定义代理,我们都需要一个操作,就是复制,因此,我们需要更新一下车辆类的定义,其实这就说到了赋值操作符=这个符号,所以当进行操作的话只需要一行等于的代码即可实现,这也就是重载=号的好处,不过有一个问题就是复制一个类的时候,代价有可能很大,这就需要分情况讨论。

2.5.C++沉思录这本书与一般的教学类的书不一样,它似乎升华到精神层次,它是在传递一种思想,一种抽象的思想,要进行一个比喻的话,像 c++ primer之类的像学习武功的招式,而这本书更像是内功修习提升的秘籍。读此书的费劲程度,也给我一种警示,还是要多练习基础,打好基础之后才能可能在内功的修习当中更上一层楼,以上为我的一点思考。

2018.03.20

沉思录读后感

沉思录读后感

2023年《沉思录》读后感

《沉思录》读后感优秀

沉思录读后感 精选15篇

本文标题: 《C,,沉思录》读后感
链接地址:https://www.dawendou.com/xindetihui/duhougan/402500.html

版权声明:
1.大文斗范文网的资料来自互联网以及用户的投稿,用于非商业性学习目的免费阅览。
2.《《C,,沉思录》读后感》一文的著作权归原作者所有,仅供学习参考,转载或引用时请保留版权信息。
3.如果本网所转载内容不慎侵犯了您的权益,请联系我们,我们将会及时删除。

重点推荐栏目

关于大文斗范文网 | 在线投稿 | 网站声明 | 联系我们 | 网站帮助 | 投诉与建议 | 人才招聘 | 网站大事记
Copyright © 2004-2025 dawendou.com Inc. All Rights Reserved.大文斗范文网 版权所有