我的C++学习心得

 我先学的是C语言,然后学的是C++,首先我从C++的名字说起,之所以叫C++是有原因的,我们如果写一段代码 I = C++;,假设I和C都是int型数,这时候I的值是C,而C的值是在C的基础上加1,我想到这里我们应该明白C++为什么不是++C了,首先它要保持对C的兼容性,然后又要有所创新,那么在C的基础上就上升一个层次。很多人都知道在C语言中引入面向对象的思想就是C++了,的确是这样的,那么什么是面向对象思想呢?我们把这个问题转换一下,面向对象语言有什么特点?这两个问题的本质是一样的,转换说起来很简单,做起来不容易啊!这个对于我来说有血一般的教训。面向对象的三个特征是:封装,继承,多态。

      封装,这里封装的意思是数据和方法的封装,就是把C语言中数据类型和函数封装在一起,构成一个类class。这样我们引入类的概念,既然出现了类,对象也就应用而生了,记得新浪微博笔试的第一道题目就是要我们详细贴切地说明类和对象之间的关系,我想这是一个哲学问题,我们在平时生活中经常对事物进行分类,为什么有些事物可以归为一类,而有些事物则不能归为一类呢?应为他们之间有共同点,我们把他们的共同点抽象出来之后定义一个类,这样我们就有了类,然后对象是什么呢?对象就是类的实例化,其实就是我们把类中的每个属性都赋值后,那么对象就产生了,对象不是抽象的,是实际存在的。电脑是一个类,但是联想昭阳EB11140643就是一台实际存在的电脑,就是我的笔记本电脑,笔记本电脑提供给我们好多接口,比如电源开关,我们只要一按下开关,本本就启动了,而作为使用的人我们没有必要知道到底里面的开机是如何实现,还有我们计算1+1=2,我们只要知道加号可以做加法就可以了,而没有必要去了解到底CPU是如何来做的,这些我们想知道的东西都被隐藏了起来,不过你要想知道也不是没有办法。这样封装不是对于我们用户来说更简单更方便吗,对于电脑本身来说不是更加安全吗,两全齐美,何乐而不为呢。其实说道这里我觉封装的概念用到程序设计语言了简直就是妙不可言,这就是语言本身所隐藏的一种美,需要我们慢慢去感受,去体会,把这种美融入自身的行为何尝不是一种内在美呢,这种学习导致行为改变的学习才是最高的学习境界。

       继承,大千世界对然不可能找到两片相同的树叶,但是万事万物之间都有一定的联系,也有一定的相似之处,有时候凭空诞生一个东西并不是很容易,但是在已有的基础上有所改进却不是很难,在C++中我们有基类和派生类之说,派生类在继承基类属性和方法的基础上又有所创新,这种创新是站在基类的肩膀之上的,而且派生类不仅可以站在一个基类的肩膀上而且可以站在好几个基类的肩膀之上,前者是单继承后者是多继承。说道继承,构造函数和析构函数就必须要讨论,构造派生类对象时,先调用基类的构造函数再调用派生类的构造函数,销毁派生类的对象时,先调用派生类的析构函数再调用基类的析构函数。在编写构造函数时我们要注意初始化列表,把数据的初始化尽可能放在初始化列表中,这样做效率比较高,我们还要注意在初始化列表中调用基类的构造函数,类的构造函数是不能声明为虚函数的,因为在构造函数执行时对象还在孕育中,也就是说对象还没有出生,把构造函数声明为虚函数是没有任何意义的,而且还会出现编译错误。不过析构函数可以声明为虚函数,这是有一定意义的,不是随便写的,我们可以定义一个基类的指针,然后用基类的指针指向一个派生类的对象,这时候我们使用delete释放指针所指的内存空间时就会出用到虚函数,应为我们的指针实际指向的是派生类对象,这时候就会先调用派生类的析构函数再去调用基类的析构函数,从而防止内存的泄露。否则就只调用基类的析构函数,这样派生类的析构函数就没有办法调用导致内存泄露。这个问题在面试中很常见。

       多态,在C++里多态就是孙悟空,因情形而变,孙悟空有时候是唐僧大徒弟八戒大师兄,有时候是牛魔王…多态也是这样子的,不用的时候你根本看不出他是什么,直到用的时候才知道他到底是谁,先说虚函数对于多态的贡献吧,这主要体现在继承中,如果基类中有一个函数虚函数,我们在派生类中重载了该虚函数,这时候我们定义一个基类类型的指针,当该指针指向派生类对象时,使用该指针调用虚函数,就调用的是派生类的虚函数,如果该指针指向的是基类对象,那么调用的就是基类的虚函数,这样在运行时候就可以根据指针实际所指的对象去调用相应的虚函数,这就是多态之一,还有虚函数的参数也可以是基类的引用或指针,这时候如果我们传递的参数如果是基类对象,那么在虚函数内部就调用基类的相关函数,如果传递的参数是派生类对象,那么就调用派生类的相关函数。还有重载和模板也体现了C++的多态性,重载就是函数名相同,但是参数类型和数目不同,如果只是返回值类型不同就不能构成重载(我记得好像有例外,但是一时半会想不出来)。其实C++中有很多容器,迭代器,泛化算法都是多态的体现,学习C++不学习这些东西真的很可惜,对于vector, list,map, set等这些常见容器的操作和属性要非常熟悉。

        C++博大精深,也不是我三言两语就能将清楚了,要想把C++的很多东西搞清楚弄明白,方法只有一个写程序,用面向对象的思想去思考问题,在实践中去体会各种思想,使用各种容器和泛型算法,这样才会有一个独到而深刻的理解,我承认我的理解是冰山一角,我只是把自己的理解写了出来,顺便也帮我巩固一下这些基础知识。

      我觉得要是真的喜欢C++建议把<<C++Primer>>这本书看一遍,把书后面的所有习题都做一遍,建议看英文原著。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值